我有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();
查询不起作用。
这种方法是否合适,还是应该添加一个专用的表来评估我的结果?
答案 0 :(得分:1)
如果您的关系定义正确,那么填充代码应该有效:
$posts = Post::whereHas('postWriters', function($query) use($arrayOfWriterIds_IFollow) {
$query->whereIn('writer_id', $arrayOfWriterIds_IFollow);
})
->orderBy('submitTimestamp', 'desc')
->take(20)
->get();