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

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

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

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

然后我还有其他三个实体,它们是“内容”,例如视频、照片等......

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

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

因此,本质上,从数据透视表中获取当前 Actor 的 content_id,然后查找与其匹配的视频。

我试图使用 hasManyThrough 但读了一段时间后我发现它不适用于多对多关系,所以我的问题是我怎样才能让这个工作? 我不想定义我自己的关系或类似的东西,我可以猜测在模型上创建一个方法,该方法只需执行一些连接即可获取我想要的值,但是与Laravel 的关系?

对于一个

 ->with(['relation'])

将不再处理这种关系,因此我无法立即加载它,这可能是一个问题,那么你们将如何解决这个问题? 预先感谢您的帮助。

最佳答案

What I want is to be able to, for instance, access all of the Videos for a particular Actor

一种方法是使用 whereHas():

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

关于mysql - Laravel 中如何通过数据透视表获取相关模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45287518/

相关文章:

php - 在 php 中导出为 CSV

php - Laravel Fluent 查询根据行是否存在更新或插入

php - 公共(public)页面中的维护模式不在管理页面中 [Laravel]

php - Laravel eloquent where 方法给出不区分大小写

laravel - 如何检索输入字段

MySql,在带有正则表达式的段落中查找

mysql - 旧 MySQL 代码出现空格错误

Mysql 大小写条件与 LIKE

php - Laravel 复合 key 验证

javascript - 通过ajax更新laravel数据库