Laravel直接和间接关系相同的两个模型

时间:2015-01-24 00:20:36

标签: php laravel orm eloquent

此问题扩展了Laravel文档中提供的示例Eloquent : Working With Pivot Tables

我在应用程序中需要以下关系:

User belongsToMany Role
Role belongsToMany Task
User belongsToMany Task
User belongsToManyThrough Role->Task (Task through Role)
  • 因此,用户可以通过Task或直接与Role相关联。
  • 所有关系都是多对多的。

我不清楚的部分是我需要在模型中设置这些部分,以便我可以使用诸如急切加载之类的东西来获取:

  • 通过角色与用户相关的所有任务
  • 直接与用户相关的所有任务
  • 与用户相关的所有任务

例如,为了启用所有这些关系,x和y应该在下面是什么?

class User extends Eloquent {

    public function tasks()
    {
        return x;
    }
}

class Task extends Eloquent {

    public function users()
    {
        return y;
    }
}

1 个答案:

答案 0 :(得分: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,它不是最优化的方式,但它正在工作。 :)