2015-01-24 2 views
2

Этот вопрос расширяет пример Eloquent : Working With Pivot Tables, представленный в документации Laravel.Laravel Прямые и косвенные отношения между двумя одинаковыми моделями

мне нужны следующие соотношения в приложении:

User belongsToMany Role 
Role belongsToMany Task 
User belongsToMany Task 
User belongsToManyThrough Role->Task (Task through Role) 
  • Таким образом, пользователь может относиться к Task либо через Role или непосредственно.
  • Все отношения - это многие ко многим.

часть, которая мне не ясно, как мне нужно, чтобы установить их в моделях, так что я могу использовать такие вещи, как нетерпеливые нагрузки, чтобы получить:

  • Всех задач, которые относятся к пользователь через роли
  • Все задачи, которые относятся к пользователю непосредственно
  • Все задачи, которые относятся к пользователю

например, что должно х и у ниже чтобы дать возможность всем этим отношениям?

class User extends Eloquent { 

    public function tasks() 
    { 
     return x; 
    } 
} 

class Task extends Eloquent { 

    public function users() 
    { 
     return y; 
    } 
} 

ответ

0

я когда-то была проблема с belongsToManyThrough, и я решил его с помощью этого кода:

public function Roles() 
{ 
    $task_ids = DB::table('tasks_users')->where('user_id', $this->id)->lists('task_id'); 
    $role_ids = DB::table('tasks_roles')->whereIn('task_id', $task_ids)->lists('role_id'); 
    return Roles::whereIn('id', $role_ids)->get(); 
} 

Я знаю, что не использует функцию belongsToManyThrough, и это не самый оптимизированный способ, но он работает. :)

Смежные вопросы