2017-03-08 85 views
0

我的系统有用户,职位和类别。是检索许多通过多种口才

我的口才关系(省略倒数)如下:

用户hasMany职位。 邮政belongsTo用户。 发布hasOne类别。

我想取回已使用由特定用户即沿东西线的所有类别:

$categories = Category->with('posts') 
->has('post') 
->where('user_id' => $user->id) 
->get(); 

显然,上述不工作,我只是把它放在那里呈现理念。

谢谢你的帮助!

回答

1

假设你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; 

这将让属于该用户的所有帖子的所有类别。 请注意,您的模型名称空间可能不同。

+0

我试图避免环路了解口才更好,因为我有一个mysql的原料解决方案,我相信,一定有说服力的一个班轮,让期望的结果 – jacobdo

+0

@jacobdo,请检查我的编辑上面。 – TheFallen

0

使用嵌套whereHas()并约束来过滤特定用户。

$categories=Category::whereHas('post.user', function($q) use($id) 
{ 
    $q->where('id',$id); //constrain on user 
})->get();