【问题标题】:Laravel query to get results having at least one element of an array?Laravel 查询以获得具有至少一个数组元素的结果?
【发布时间】: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 如果您希望得到答案,则需要显示它们,我们无法猜测列的名称

标签: mysql laravel laravel-4


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2022-08-17
    • 2016-02-02
    • 2017-05-11
    • 2020-12-28
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    相关资源
    最近更新 更多