Laravel文档中的这个示例将按用户在created_at中对帖子进行排序。
wordFunction = edu.stanford.nlp.process.AmericanizeFunction
我如何转过来,以便用户按帖子上的created_at日期排序?即我想通过最新帖子的用户订购用户。
答案 0 :(得分:1)
我已经回答了类似in this question的问题。您可以在任何关系定义后执行orderBy
。
public function relation()
{
return $this->hasMany('App\Models\Related', 'foreign_key', 'local_id')
->orderBy('id', 'ASC');
}
答案 1 :(得分:0)
似乎任何一个答案都没有回答问题。
您可以使用Eloquent关系对子模型进行排序,但不能使用具有Eloquent关系的子模型的属性对父模型进行排序。您需要使用joins。
例如:
$users = App\User::selectRaw('users.*, MAX(posts.created_at) as latest_post_timestamp')
->join('posts', 'posts.user_id', '=', 'users.id')
->groupBy('users.id')
->orderBy('latest_post_timestamp', 'DESC')
->get();
加入帖子和用户表。选择所有用户属性+帖子的max created_at属性,我将其别名为“latest_post_timestamp”。我使用这个别名来命令结果。
这不会急于加载帖子,所以如果您仍然需要这样做,那么只需添加with方法,如下所示:
$users = App\User::with('posts')
->selectRaw('users.*, MAX(posts.created_at) as latest_post_timestamp')
->join('posts', 'posts.user_id', '=', 'users.id')
->groupBy('users.id')
->orderBy('latest_post_timestamp', 'DESC')
->get();