Laravel 查询以获得具有至少一个数组元素的结果?

Posted

技术标签:

【中文标题】Laravel 查询以获得具有至少一个数组元素的结果?【英文标题】:Laravel query to get results having at least one element of an array? 【发布时间】:2016-05-17 06:10:23 【问题描述】:

我有一对多关系的 postspostWriters 表。 (我也有writers 表)。

每篇文章都是由几位作者合作撰写的。

我想获得至少由我关注的一位作家撰写的前 20 篇文章。

例如我关注的作家:

$arrayOfWriterIds_IFollow = [3, 5, 123, 45, ..., 3456] // total 100 ids

查询:

$posts = Post::where(
    array( 'postWriters' => function($l) 
        $l->whereIn('writer_id', $arrayOfWriterIds_IFollow); // or array(3, 5) for 2 writers..
    )
)
->orderBy('submitTimestamp', 'desc')
->take(20)
->get();

查询无效。

这种方法是否合适,或者我应该添加一个专门的表格来评估我的结果?

【问题讨论】:

你是如何关注作家的? 我有一些表格,其中一张是下面的表格。我从这张表中得到 $arrayOfWriterIds_IFollow 显示您的数据库结构和模型,无需为此任务进行 2 个不同的查询,您可以将它们组合为 1 个。 问题相关的表有3个:posts、postWriters和writers。 @user2356198 如果您希望得到答案,则需要显示它们,我们无法猜测列的名称 【参考方案1】:

如果你的关系定义正确,那么下面的代码应该可以工作:

$posts = Post::whereHas('postWriters', function($query) use($arrayOfWriterIds_IFollow) 
    $query->whereIn('writer_id', $arrayOfWriterIds_IFollow);
)
->orderBy('submitTimestamp', 'desc')
->take(20)
->get();

【讨论】:

以上是关于Laravel 查询以获得具有至少一个数组元素的结果?的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB查询以选择具有所有元素都匹配某些条件的数组的文档

Laravel 获取一个查询以检查 QueryBuilder 是不是存在两个关系中的至少一个而不忽略其他过滤器

在一个查询中使用具有多个关联数组的 laravel eloquent 获取数据

具有 unnest 的 PostgreSQL 查询不返回空值的结果行

具有 10 个元素的随机布尔数组,其中 10 个元素中有 3 个为真 [重复]

如何使用从 laravel 中的数组中获取的各种术语进行 mysql 关联查询