我试图让我的用户(实际上是作者,最多有 5-6 位作者)将他们的最后一篇文章显示在主页的侧边栏中。由于它们将列在主页中,因此我试图减少由于性能问题引起的 sql 查询量。我试过了;
$users=User::with(array('posts'=>function($query){
$query->take(1);
}))->get();
然而,它总共只有一个帖子,而不是每个用户一个。而且我的sql知识有限。
如何使用 Eloquent ORM、Query Builder 或原始 sql 查询来解决我的问题?
最佳答案
一个解决方案是在 User
模型上定义一个 hasOne
关系,按帖子 created_at
列排序。
public function lastPost()
{
return $this->hasOne('Post')->orderBy('created_at', 'desc');
}
那么你的查询就是这样。
$users = User::with('lastPost')->get();
要限制列,您可以在关系级别限制查询:
return $this->hasOne('Post')->select('id', 'user_id', 'title', 'created_at')->orderBy('created_at', 'desc');
或者当你使用 with
方法时:
$users = User::with(['lastPost' => function($query)
{
$query->select('id', 'user_id', 'title', 'created_at');
})->get();
请注意,您还需要 user_id 和 created_at 列,因为它们是 WHERE
和 ORDER BY 所必需的
查询中的子句。
关于sql - 如何检索所有用户的最后一篇文章,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16121543/