Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel Eloquent-按联接表上的列进行排序_Laravel_Eloquent - Fatal编程技术网

Laravel Eloquent-按联接表上的列进行排序

Laravel Eloquent-按联接表上的列进行排序,laravel,eloquent,Laravel,Eloquent,这个来自Laravel文档的示例将在用户内部通过创建来订购帖子 $users = App\User::with(['posts' => function ($query) { $query->orderBy('created_at', 'desc'); }])->get(); 我该如何扭转这一局面,以便用户在发布的日期由创建的_进行排序?也就是说,我想按最新帖子的用户排序。我回答了类似的问题。您只需在任何关系定义之后执行orderBy public function

这个来自Laravel文档的示例将在用户内部通过创建来订购帖子

$users = App\User::with(['posts' => function ($query) {
    $query->orderBy('created_at', 'desc');

}])->get();

我该如何扭转这一局面,以便用户在发布的日期由创建的_进行排序?也就是说,我想按最新帖子的用户排序。

我回答了类似的问题。您只需在任何关系定义之后执行
orderBy

public function relation()
{
    return $this->hasMany('App\Models\Related', 'foreign_key', 'local_id')
                ->orderBy('id', 'ASC');
}

这两个答案似乎都不能真正回答问题

可以使用雄辩关系对子模型进行排序,但不能使用具有雄辩关系的子模型的属性对父模型进行排序。你需要用这个

例如:

$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();
加入posts和users表。选择所有用户属性+帖子的max created_at属性,我将其别名为“latest_post_timestamp”。我使用此别名对结果进行排序

这不会立即加载帖子,因此如果您仍然需要这样做,只需添加如下方法:

$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();

这不仅仅是按id订购相关项目吗?在我的示例中,我想按照用户在日期创建的相关帖子对用户进行排序。您的示例没有更改用户返回的顺序,是吗?您是对的,该字段是无关的,但它只对关系数据进行排序。我会更新的。