可以使用Laravel Eloquent的group by和orderBy方法来实现按用户分组并按最大日期排序的查询。
假设有一个User模型和一个Post模型,User模型有一个hasMany关联的Post模型。我们可以按如下方式进行查询:
use App\User;
$users = User::with(['posts' => function ($query) {
$query->orderBy('created_at', 'desc');
}])
->groupBy('users.id')
->orderBy('posts.created_at', 'desc')
->get();
foreach ($users as $user) {
// 输出用户信息
echo $user->name;
// 输出用户最新的帖子
echo $user->posts->first()->title;
}
在上面的例子中,我们使用with
方法来预加载用户的帖子关联,并使用orderBy
方法对帖子按创建日期进行降序排序。然后,我们使用groupBy
方法对用户进行分组,确保每个用户只返回一条记录。最后,我们再次使用orderBy
方法对帖子的创建日期进行降序排序,以便按照最大日期排序用户。
请注意,groupBy
方法只适用于MySQL数据库。如果您使用的是其他数据库,可能需要根据数据库的要求进行相应的调整。
希望这个例子能帮助到您!
上一篇:按用户分类的产品过滤