Используйте метод withCount с некоторым условием - PullRequest
1 голос
/ 04 июля 2019

У меня есть 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 count (создан на этой неделе):

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

Но он сортирует по всем показателям (положительные и отрицательные показатели).

Есть ли способ отфильтровывать только положительные показатели.

1 Ответ

2 голосов
/ 04 июля 2019

Если вам нужны только модели 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();
...