我的系统有用户,职位和类别。是检索许多通过多种口才
我的口才关系(省略倒数)如下:
用户hasMany
职位。 邮政belongsTo
用户。 发布hasOne
类别。
我想取回已使用由特定用户即沿东西线的所有类别:
$categories = Category->with('posts')
->has('post')
->where('user_id' => $user->id)
->get();
显然,上述不工作,我只是把它放在那里呈现理念。
谢谢你的帮助!
我的系统有用户,职位和类别。是检索许多通过多种口才
我的口才关系(省略倒数)如下:
用户hasMany
职位。 邮政belongsTo
用户。 发布hasOne
类别。
我想取回已使用由特定用户即沿东西线的所有类别:
$categories = Category->with('posts')
->has('post')
->where('user_id' => $user->id)
->get();
显然,上述不工作,我只是把它放在那里呈现理念。
谢谢你的帮助!
假设你后belongsTo
与关系类被命名为类别你可以这样做:
$user->load('posts.category');
$user->posts->each(function ($post) {
$post->category->id;
});
编辑
您可以将hasManyTrough
关系添加到用户模型,并且您将能够访问用户的所有类别粗略的职位。加入用户类:
public function categories()
{
return $this->hasManyThrough('App\Category', 'App\Posts');
}
然后你就可以使用它像这样:
$user->load('categories');
$categories = $user->categories;
这将让属于该用户的所有帖子的所有类别。 请注意,您的模型名称空间可能不同。
使用嵌套whereHas()
并约束来过滤特定用户。
$categories=Category::whereHas('post.user', function($q) use($id)
{
$q->where('id',$id); //constrain on user
})->get();
有可能有许多不同的方式来实现你所追求的。
https://laravel.com/docs/5.4/eloquent-relationships#has-many-through
我试图避免环路了解口才更好,因为我有一个mysql的原料解决方案,我相信,一定有说服力的一个班轮,让期望的结果 – jacobdo
@jacobdo,请检查我的编辑上面。 – TheFallen