我在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'])
将不再使用这种关系,因此我不能急于加载它,这可能是一个问题,所以你们怎么解决这个问题? 提前感谢您的帮助。
答案 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();