【发布时间】:2021-01-25 01:28:09
【问题描述】:
我有一个小型博客应用程序,它允许用户上传照片和音频。用户还可以搜索其他博客。在搜索时,我想为我的查询添加一个排名,优先级如下:
1) Users with most photos
2) Users with most audio
User 模型是这样构造的:
public function blog() {
return $this->hasOne(Blog::class);
}
public function photos() {
return $this->hasMany(Photo::class);
}
public function audio() {
return $this->hasMany(Audio::class);
}
博客模型是这样构建的:
public function user()
{
return $this->belongsTo(User::class);
}
我当前的搜索查询:
$blogs = Blog::where('description', 'ilike', '%'.$search.'%')
->orWhere('title', 'ilike', '%'.$search.'%')
->orWhereHas('user', function($query) use ($search) {
$query->where('name', 'ilike', '%'.$search.'%')
->orWhere('username', 'ilike', '%'.$search.'%');
})
->paginate(10);
根据给定的详细信息,我如何调整我的查询以返回对我的用户照片和音频计数进行排名的博客?
** 更新 **
我可以通过使用带有预加载的withCount 方法来获取每个嵌套关系的计数:
$blogs = Blog::where('description', 'ilike', '%'.$search.'%')
->orWhere('title', 'ilike', '%'.$search.'%')
->orWhereHas('user', function($query) use ($search) {
$query->where('name', 'ilike', '%'.$search.'%')
->orWhere('username', 'ilike', '%'.$search.'%');
})
->with(['user' => function($query){
$query->withCount(['blobs', 'audio']);
}])
->paginate(10);
但是,我怎样才能通过这些嵌套的计数属性对当前查询进行排序呢?
【问题讨论】:
标签: sql laravel eloquent relational-database