Laravel 查询以获得具有至少一个数组元素的结果?
Posted
技术标签:
【中文标题】Laravel 查询以获得具有至少一个数组元素的结果?【英文标题】:Laravel query to get results having at least one element of an array? 【发布时间】:2016-05-17 06:10:23 【问题描述】:我有一对多关系的 posts
和 postWriters
表。 (我也有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 查询不返回空值的结果行