如何通过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();
那工作,但这意味着我不能急于加载的关系,并将不得不创建一个额外的包装类或存储库的自定义查询,如果没有其他选项,那么我将不得不这样做,但它是不幸的 – JonnySerra
@JonnySerra你可以渴望加载数据。只需在查询中添加“with()”即可。 –