2014-09-23 34 views
0

我有以下关系:雄辩与条款嵌套在中间关系

  • 用户[多到多用]分配
  • 分配[多到多用]徽章
  • 的assignment_user透视表有一个标志“is_finished”我需要是真实的

这些都是我在匹配模式的关系:

user.php的

public function assignments() 
{ 
return $this->belongsToMany('Assignment')->withPivot('is_finished')->withTimestamps(); 
} 

Assignment.php

public function badges() 
{ 
return $this->belongsToMany('Badge', 'badge_assignment')->withTimestamps(); 
} 

Badge.php

public function assignments() 
{ 
return $this->belongsToMany('Assignment', 'badge_assignment')->withTimestamps(); 
} 

我试图让所有的徽章我的用户完成分配。这是我的查询:

$user = User::with(array(
'assignments' => function($query) { 
$query->where('is_finished', '=', true)->orderBy('updated_at', 'desc'); 
}) 
) 
->with('badges') 
->username($name)->first(); 

然而,这是渲染错误“调用未定义的方法照亮\数据库\查询\生成器::徽章()”当我使用的foreach($用户> assignments->徽章。 ..)。

然后我试图让第一与范围内的徽章,但我不知道如何到达is_finished:

$user = User::with(array(
'assignments.badges' => function($query) { 
$query->where('is_finished', '=', true)->orderBy('updated_at', 'desc'); 
}) 
) 
->username($name)->first(); 

有了这个,我得到“未找到列”,这是因为查询在徽章内寻找is_finished,而不是assign_user关系。

当我有这个问题我想这只是可以肯定的:

User::with('assignments.badges')->whereUsername($username); 

...,我仍然得到“未定义的属性:照亮\数据库\雄辩\收藏:: $徽章” 。

我在做什么错?

回答

0

你需要加载嵌套assignments.badges这样的:使用您的代码

$user = User::with(array(
    'assignments' => function($query) { 
     $query->where('is_finished', '=', true)->orderBy('updated_at', 'desc'); 
    }) 
) 
    ->with('assignments.badges') 
    ->username($name) // do you have a scope for this or should it be whereUsername? 
    ->first(); 
+0

呈现相同的错误我的第三个(简单)的尝试:“未定义的属性:照亮\数据库\雄辩\收藏:: $徽章” 。 仅供参考,我从查询中获取结果后,在我的视图中使用$ user-> assignments->徽章。 – Anonymous 2014-09-23 11:42:33

+0

我不这么认为。你可能试图调用这样的东西:'$ user-> assignments-> badges',它显然会抛出这个错误。对于渴望加载本身,我的代码是要走的路,相信我。那么,是的,你当然不能这样做 - 你想在模型的集合中获取'模型'关系 - 例如你需要一个foreach循环。 – 2014-09-23 11:44:48

+0

傻了,当然你是对的。我是愚蠢的,试图获取徽章,而不需要为每个任务运行第二个循环。非常感谢快速解决方案! – Anonymous 2014-09-23 11:47:53