链接雄辩的关系函数?

时间:2013-12-23 16:49:34

标签: laravel eloquent chaining

问题在于:

假设我有3个Eloquent模型:User,Project,Task。

每个用户都有项目,每个项目都有任务。我已经建立了我的雄辩关系,所以我可以打电话给例如:$user->projects$project->tasks等等,但我想做一个嵌套。

我想为用户的项目获取任务。 所以我需要执行以下操作:$user->projects()->tasks()然后应用where规则($user->projects()->tasks()->whereSomething(1)->get()),但它当然不起作用。我可以循环所有项目并手动提取任务,但我想有一个简写,我找不到。你能帮忙吗?

1 个答案:

答案 0 :(得分:0)

您可以尝试这样的事情

$users = User::with(array('projects.tasks' => function($query)
{
    // For example I used "task_name" as a field name in tasks table
    $query->where('task_name', 'add_user');
}))->get();

更新:我工作项目中的代码(如果有帮助)

// Model:Role (table:roles)
public function permissions()
{
    return $this->belongsToMany('Permission');
}

// Model:Permission (table:permissions)
public function roles()
{
    return $this->belongsToMany('Role');
}

有第三个(中间/透视)表permission_role,这有效:

$u = User::with(array('roles.permissions' => function($query)
{
    $query->where('name', 'add_user');
}))->get()->first();
print_r($u->roles[0]->permissions->first()->toArray());

输出:

Array
(
    [id] => 1
    [name] => add_user
    [pivot] => Array
    (
        [role_id] => 1
        [permission_id] => 1
    )
)