如何通过Laravel中的数据透视表获取相关模型?

时间:2017-07-24 18:23:54

标签: mysql laravel laravel-5 relationship laravel-query-builder

我在Laravel 5.4应用程序中遇到了一些问题,在我的数据库中,我有几个通过称为内容的中央模型相关的实体。

Actor     -> actors_contents     -> Content
Category  -> categories_contents -> Content

然后我有三个其他实体,如视频,照片等“内容”...

Video (content_id)  -> Content
Photo (content_id)  -> Content
Stream (content_id) -> Content

我想要的是,例如,可以从Actor模型访问特定Actor的所有视频,同时还能够直接获取视频模型中的Actors。

基本上,从数据透视表中获取当前Actor的content_id,然后找到与之匹配的视频。

我正在尝试使用 hasManyThrough ,但在阅读了一段时间后,我发现它无法与多对多关系一起使用,所以我的问题是我怎样才能使这项工作成功呢? 我不想要定义我自己的关系或类似的东西,我可以猜想在模型上创建一个方法,它只是做一些连接来获得我想要的值,但这与后面的场景相比有什么影响。 Laravel的关系?

一个人

 ->with(['relation'])

将不再使用这种关系,因此我不能急于加载它,这可能是一个问题,所以你们怎么解决这个问题? 提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

  

我想要的是能够,例如,访问特定演员的所有视频

一种方法是使用whereHas()

$actorName = 'John Travolta';
Video::whereHas('content', function ($q) use ($actorName) {
        $q->whereHas('actors', function ($q) use ($actorName) {
            $q->where('name', $actorName);
        });
    })->get();