Есть такой код:
$items = $this->channels;
// Category
if ($request->has('category'))
{
$items = $items->where('category_id', $request->category);
}
// Sort by default (count_subscribers, DESC)
if ($request->has('sort'))
{
switch ($request->sort)
{
case 'popular':
$items = $items->votes()
->select(DB::raw('SUM(value) as vote_total'))
->orderBy('vote_total', 'DESC');
break;
case 'new':
$items = $items->latest();
break;
default:
$items = $items->orderBy('count_subscribers', 'DESC');
break;
}
}
else
{
$items = $items->orderBy('count_subscribers', 'DESC');
}
$items = $items->whereStatus('active')
->with('category', 'attributes')
->paginate(12);
return view('frontend/channels/all', [
'items' => $items,
]);
Надо чтобы когда открывался страница популярных каналов (то есть $request->sort == 'popular') элементы сортировались по сумме проголосованных.
Дело в том что данные голосования находится в отдельной таблице, и после case 'popular' происходит конфликт с общими условиями (а остальные кейсы работают корректно):
$items = $items->whereStatus('active')
->with('category', 'attributes')
->paginate(12);
Как сделать так чтобы case 'popular' работала корректно и не мешал общим условиям и кейсам?
P.S. Сообщения ошибки:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'status' in 'where clause' (SQL: select count(*) as aggregate from `votes` where `votes`.`voteable_id` is null and `votes`.`voteable_id` is not null and `votes`.`voteable_type` = App\Models\Channel and `status` = active)