怎么在whereHas里面orderBy?
目前我有个查询:
$likes = Topic::whereHas('likes', function (Builder $query) use ($user) {
$query->where('user_id', $user->id);
})->with('user')->orderBy('created_at', 'desc')->paginate(6);
我靠likes表的里topic_id和user_id,查出某个用户点赞了哪些文章,我加了一个orderBy想要实现,最近点赞的文章排列在最前面,但是这个查出来的是以Topic的发布时间排序的,怎么以likes的创建时间排序呢?
如果你的likes表model名叫Likes,通过Likes.topic_id关联到Topic.id的话,以下代码可以试一下。 不是我猜的这样的话,你自己看着改。
可以在 你 模型关联 likes 的地方直接orderBy(你的排序字段)
orderBy 根据 with 关联中的字段来进行排序的,排序的实现是以子查询的方式来的;数据量一大就会比较慢,不建议这么使用;如果不考虑性能,写法非常方便简洁;
直接贴代码,首先注册
Illuminate\Database\Eloquent\Builder
宏:然后就可以直接使用了
PS:laravel7 + 以上使用, 低版本没有试过
在whereHas 中的排序只影响关联模型的顺序,不会影响到Topic主表的顺序,有两种思路: