Количество построителей запросов Laravel

Я использую конструктор запросов Laravels для получения списка элементов с некоторыми параметрами фильтра - мне нужно выполнить подсчет внутри этого запроса:

        $f = DB::table('Likes')
            ->join('Freestyle', 'Likes.FreestyleID', '=', 'Freestyle.id')
            ->join('Beat', 'Freestyle.BeatId', '=', 'Beat.id')
            ->join('Track', 'Beat.TrackId', '=', 'Track.id')
            ->join('Genre', 'Track.GenreId', '=', 'Genre.id')
            ->select('Likes.freestyleID as likeFreestyleID', 'Freestyle.*', 'Beat.TrackId as UseMeForTrack',
    'Genre.id as GenreID')
            ->where('Freestyle.Active', '1')
            ->where('Freestyle.created_at', '>', "$dateScope")
            ->whereNull('Freestyle.deleted_at')
            ->whereIn('GenreID', $request->genre)
        ->first();

Чтобы подсчитать, сколько раз "FreestyleID" появляется в таблице лайков.

Это возможно? Возвращенные данные идеальны. Мне просто нужно количество лайков, которые есть у фристайла, где FreestyleID в таблице лайков равен нулю.


person ExohJosh    schedule 18.03.2016    source источник


Ответы (2)


Что-то вроде этого :

$f = DB::table('Likes')
                ->join('Freestyle', 'Likes.FreestyleID', '=', 'Freestyle.id')
                ->join('Beat', 'Freestyle.BeatId', '=', 'Beat.id')
                ->join('Track', 'Beat.TrackId', '=', 'Track.id')
                ->join('Genre', 'Track.GenreId', '=', 'Genre.id')
                ->select('Likes.freestyleID as likeFreestyleID','count(Likes.FreestyleID)', 'Freestyle.*', 'Beat.TrackId as UseMeForTrack',
        'Genre.id as GenreID')
                ->where('Freestyle.Active', '1')
                ->where('Freestyle.created_at', '>', "$dateScope")
                ->whereNull('Freestyle.deleted_at')
                ->whereIn('GenreID', $request->genre)
            ->first();
person Drudge Rajen    schedule 18.03.2016

Я думаю, вы сможете использовать raw expression вот так:

$f = DB::table('Likes')
  ->join('Freestyle', 'Likes.FreestyleID', '=', 'Freestyle.id')
  ->join('Beat', 'Freestyle.BeatId', '=', 'Beat.id')
  ->join('Track', 'Beat.TrackId', '=', 'Track.id')
  ->join('Genre', 'Track.GenreId', '=', 'Genre.id')
  ->select(DB::raw('COUNT(likes.FreestyleID) as num_likes'), 'Likes.freestyleID as likeFreestyleID', 'Freestyle.*', 'Beat.TrackId as UseMeForTrack',
'Genre.id as GenreID')
  ->where('Freestyle.Active', '1')
  ->where('Freestyle.created_at', '>', "$dateScope")
  ->whereNull('Freestyle.deleted_at')
  ->whereIn('GenreID', $request->genre)
  ->groupBy('Freestyle.id')
  ->first();
person Cyclonecode    schedule 18.03.2016
comment
Разве это не вернет количество лайков, которые получили все результаты, а не количество лайков в этом вольном стиле? - person ExohJosh; 18.03.2016
comment
Это возвращает количество лайков внутри таблицы, а не количество лайков, которые есть у фристайла - хотя почти там, цените вашу помощь :) - person ExohJosh; 18.03.2016