Laravel 5.7 - 多对多关系 - 选择具有提供的类型 ID 数组的电影

Posted

技术标签:

【中文标题】Laravel 5.7 - 多对多关系 - 选择具有提供的类型 ID 数组的电影【英文标题】:Laravel 5.7 - Many To Many Relation - Select Movies which have the provided array of Genre IDs 【发布时间】:2020-06-11 13:11:02 【问题描述】:

这是我的控制器代码:

if ($request->genre && !$request->search) 
    $genres = explode(',', $request->genre);
    return Movie::with('genres')->whereHas('genres', function ($q) use ($genres) 
        return $q->whereIn('id', $genres);
    )->paginate(10);

我的数据透视表包含movie_id 和genre_id。电影和流派表都不包含彼此 ID 的引用。

我需要从表中选择所有具有用户选择的流派的电影。

例如,id's = [1, 4, 9] 的数组并从包含这些流派 ID 的数据透视表中进行选择。

提前致谢!

编辑: 一般问题是return 内部回调以及我稍后处理数据的方式。感谢您的回答,我很感激! :)

【问题讨论】:

那么你的代码是怎么回事?不行吗? 我认为您可能只需要在您的 whereHas() 查询中删除 return 【参考方案1】:

您的查询有误,请尝试给定的查询。

return Movie::with(['genres'])->whereHas('genres' ,function ($query) use ($genres)
    $query->whereIn('id', $genres);
)->paginate(10);

【讨论】:

这也会得到任何没有有这些类型的电影,但它不会是关系的一部分。 @Qirel 谢谢,现在应该可以了。这个问题只有错误,因为它是return 内部查询。 :-)

以上是关于Laravel 5.7 - 多对多关系 - 选择具有提供的类型 ID 数组的电影的主要内容,如果未能解决你的问题,请参考以下文章

laravel中具有多对多关系的高级搜索

Laravel eloquent 检查不存在的多对多关系

Laravel 多对多关系:Pivot VS JSON

选择多对多的关系

Laravel 上的多对多问题关系

Laravel5.1 模型 --多对多关系