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

时间:2016-02-07 15:05:33

标签: mysql laravel laravel-4

我有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();

查询不起作用。

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

1 个答案:

答案 0 :(得分:1)

如果您的关系定义正确,那么填充代码应该有效:

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