(laravel 4.2)
涉及四个表格;用户,帖子,标志和post_flags。
我想检索某个用户拥有的每个帖子,并检索为帖子设置的标志,但只检索相关用户设置的标志。
例如:一个帖子可以有标志:1,2,2,3其中标志2被设置两次。一次是用户A,一次是用户B.我不想看到用户B设置的标志。
我的控制器中的Eloquent查询:
$posts = Post::whereHas('companies', function($q) use($company_id) {
$q->where('id', '=', $company_id);
})->with('flags')->get();
我的帖子模型中的关系:
public function flags() {
return $this->belongsToMany('PostFlag', 'post_postflags', 'post_id', 'flag_id')
->withTimestamps()->withPivot('owner');
}
如何使用Eloquent ORM实现这一目标?
更新
我的最后一个问题,感谢andrewtweber:
最终查询
$posts = Post::whereHas('users', function($q) use($id) {
$q->where('id', '=', $id);
})->get()->load([
'flags' => function($query) use($id) {
$query->where('owner', '=', $id)->orWhere('owner', '=', 'SYSTEM');
}
]);
答案 0 :(得分:1)
使用wherePivot
http://laravel.com/api/4.2/Illuminate/Database/Eloquent/Relations/MorphToMany.html
$flags = $post->flags()
->wherePivot('user_id', '=', $user_id)
->get();
或急切加载
$posts->load([
'flags' => function ($query) use($user_id) {
$query->wherePivot('user_id', '=', $user_id);
}
]);