在一定条件下使用with Count方法 [英] Use withCount method with some condition

查看:0
本文介绍了在一定条件下使用with Count方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

musics_rate:
    music_id : integer
    user_id : integer
    rate_type : boolean

音乐模型

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

现在我要按music_ratesWHERErate_type==true计数(本周创建)对musics进行排序:

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

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

有没有办法只筛选积极的比率。

推荐答案

如果您只需要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();

这篇关于在一定条件下使用with Count方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆