雄辩的关系属于ToMany()

时间:2018-10-15 13:02:39

标签: php laravel-5 orm eloquent

我正在尝试查找各种​​posts中的所有categories

我有与Post相关的CategorybelongsToMany()模型 如下:

发布

public function categories()
{
    return $this->belongsToMany('App\Category');
}

类别

public function posts()
{
    return $this->belongsToMany('App\Post');
}

在两者之间有数据透视表category_post,所有关系都可以很好地工作。

我遇到的问题如下。当user查看post时,我想显示相关的posts,为此,我想显示与{属于同一posts的{​​{1}} {1}}。

如果我执行以下操作:

categories

我恢复了第一个post的帖子,但该帖子具有更多的关联$post = Post::where('slug',$slug)->first(); $relateds = $post->categories->first()->posts()->get(); 。我需要所有帖子。

我尝试过:

category

还有一些类似的东西,但是没有用。

请问正确的方法是什么?

谢谢。

1 个答案:

答案 0 :(得分:1)

您可以使用posts构建器上的whereHas()雄辩的方法来获取所有相关的Post

$post = Post::where('slug',$slug)->first();

$category_ids = $post->categories->pluck('id')->all();

$related = Post::whereHas('categories', function($query) use ($category_ids) {
    $query->whereIn('id', $category_ids);
})->get();

在这里,我们首先得到$post。然后我们获得category的所有$post ID。

最后,我们使用posts构建器方法在category变量中找到id$category_ids并在其中whereHas()中找到所有whereIn()(接着是bot.check查询方法。

我希望这会有所帮助。