2013-12-23 49 views
0

这里是问题:链接雄辩关系函数?

可以说我有3个雄辩的模型:用户,项目,任务。

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

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

回答

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 
    ) 
) 
+0

它的工作原理,但用户的任务是一个受保护的属性。我看到他们在垃圾场,但无法得到他们。如果我对用户执行任务(),它给了我所有的任务,因为我有这样的关系,但它忽略了Where。 – barakuda28

+0

我不确定你的问题,但它应该工作,AFAIK,这是正确的做法,我几乎做到了这一点。 –