雄辩与条款嵌套在中间关系
问题描述:
我有以下关系:雄辩与条款嵌套在中间关系
- 用户[多到多用]分配
- 分配[多到多用]徽章
- 的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);
...,我仍然得到“未定义的属性:照亮\数据库\雄辩\收藏:: $徽章” 。
我在做什么错?
答
你需要加载嵌套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();
呈现相同的错误我的第三个(简单)的尝试:“未定义的属性:照亮\数据库\雄辩\收藏:: $徽章” 。 仅供参考,我从查询中获取结果后,在我的视图中使用$ user-> assignments->徽章。 – Anonymous 2014-09-23 11:42:33
我不这么认为。你可能试图调用这样的东西:'$ user-> assignments-> badges',它显然会抛出这个错误。对于渴望加载本身,我的代码是要走的路,相信我。那么,是的,你当然不能这样做 - 你想在模型的集合中获取'模型'关系 - 例如你需要一个foreach循环。 – 2014-09-23 11:44:48
傻了,当然你是对的。我是愚蠢的,试图获取徽章,而不需要为每个任务运行第二个循环。非常感谢快速解决方案! – Anonymous 2014-09-23 11:47:53