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

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

问题描述:

我在我的Laravel 5.4应用程序中遇到了一些问题,在我的数据库中,我有几个实体通过名为的内部模型这样的中心模型相关。如何通过Laravel中的数据透视表获取相关模型?

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

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

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

我想是可以的,比如所有的访问对于来自Actor模型的特定演员的视频,同时也能够直接获得视频模型内的演员。

因此,从数据透视表中获取当前Actor的content_id,然后找到匹配它的视频。

我试图使用hasManyThrough但在阅读了一段时间后,我发现它不适用于多对多的关系,所以我的问题是我该如何使这项工作,否则呢? 我不想要定义我自己的关系或类似的东西,我可以猜测在模型上创建一个方法,只是做一些连接来获得我想要的值,但是当比较时,这会在幕后产生影响Laravel的关系?

对于一个

->with(['relation']) 

不会同意这种关系,因此我就不能急于加载它,这可能是有点问题,所以如何将你们解决这个不再起作用问题? 非常感谢您的帮助。

我想要的是能够,例如,访问所有的影片的特定演员要做到这一点是使用

一种方式whereHas()

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

那工作,但这意味着我不能急于加载的关系,并将不得不创建一个额外的包装类或存储库的自定义查询,如果没有其他选项,那么我将不得不这样做,但它是不幸的 – JonnySerra

+0

@JonnySerra你可以渴望加载数据。只需在查询中添加“with()”即可。 –