在某些情况下使用withCount方法

时间:2019-07-04 06:51:01

标签: laravel laravel-5 eloquent lumen laravel-5.8

我有一个musics_rate表和一个musics表:

musics_rate:
    music_id : integer
    user_id : integer
    rate_type : boolean

音乐模型

public function rates()
{
    return $this->belongsToMany(User::class, 'musics_rate');
}

现在,我要按musics个对music_rates进行计数的rate_type==true排序(在本周创建):

Music::where('created_at','>=', Carbon::parse('last saturday'))
    ->withCount('rates')
    ->orderby('rates_count','desc')
    ->get();

但是它按所有比率(正比率和负比率)计数排序。

有没有办法只过滤正利率。

1 个答案:

答案 0 :(得分:2)

如果您只希望music为正的rate模型:

Music::whereHas('rates', function ($q) {
    $q->where('rate_type', true);
})
    ->where('created_at', '>=', Carbon::parse('last saturday'))
    ->withCount('rates')
    ->orderby('rates_count', 'desc')
    ->get();

如果要使用所有music模型,但只加载正数rates

Music::with([
    'rates' => function ($q) {
        $q->where('rate_type', true);
    }
])
    ->where('created_at', '>=', Carbon::parse('last saturday'))
    ->withCount('rates')
    ->orderby('rates_count', 'desc')
    ->get();