sql - 如何检索所有用户的最后一篇文章

标签 sql laravel laravel-4

我试图让我的用户(实际上是作者,最多有 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_idcreated_at 列,因为它们是 WHEREORDER BY 所必需的 查询中的子句。

关于sql - 如何检索所有用户的最后一篇文章,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16121543/

相关文章:

php - Laravel blade - 如果满足条件则添加一个类

laravel - 通过 Laravel 构建 RESTful 应用程序的传统方法是什么?

php - 如何将 laravel 5 Web 应用程序及其数据库托管到 azure?

sql - 如何在 Oracle PL/SQL 中 SELECT INTO 数字数组?

python - SQLAlchemy 一对一关系创建多行

php - A non well-formed numeric value 遇到 laravel time calculate

php - 将 Mysql 查询转换为 Laravel 4 Eloquent

php - Laravel 和多个数据库连接

sql - 如何计算 Microsoft Access SQL 查询中的连续日期?

mysql - SQL 中的 REPLACE 与 INSERT