【发布时间】:2014-09-23 19:43:56
【问题描述】:
我有以下关系:
- 用户 [many-to-many with] 分配
- 作业 [多对多与] 徽章
- assignment_user 数据透视表有一个标志“is_finished”,我需要设置为 true
这些是我在匹配模型中的关系:
用户.php
public function assignments()
{
return $this->belongsToMany('Assignment')->withPivot('is_finished')->withTimestamps();
}
assignment.php
public function badges()
{
return $this->belongsToMany('Badge', 'badge_assignment')->withTimestamps();
}
徽章.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($user->assignments->badges ...) 时,这会呈现错误“调用未定义的方法 Illuminate\Database\Query\Builder::badges()”。
然后我尝试在第一个范围内获取徽章,但我不知道如何到达 is_finished:
$user = User::with(array(
'assignments.badges' => function($query) {
$query->where('is_finished', '=', true)->orderBy('updated_at', 'desc');
})
)
->username($name)->first();
这样我得到“找不到列”,因为查询是在徽章中寻找 is_finished,而不是 assignment_user 关系。
当我遇到这个问题时,我尝试了这个只是为了确定:
User::with('assignments.badges')->whereUsername($username);
...我仍然收到“未定义的属性:Illuminate\Database\Eloquent\Collection::$badges”。
我做错了什么?
【问题讨论】: