Переход к Laravel 6 Я пытаюсь использовать addSelect для подзапросов и избавляться от DB :: raw () с помощью, поэтому я пытаюсь переделать запрос:
$taskList = Task
::getByIsHomepage($is_homepage)
->getByStatus($viewedTasks)
->leftJoin('users', 'users.id', '=', 'tasks.leader_id')
->leftJoin('categories', 'categories.id', '=', 'tasks.category_id')
->orderBy('tasks.' . $order_by, $order_by_direction)
->select(
'tasks.*',
'users.name as leader_name',
'categories.name as category_name',
'categories.slug as category_slug',
\DB::raw(' ( select count(' . $prefix . 'events.id) from ' . $prefix . 'events where ' . $prefix . 'events.task_id = ' .
$prefix . 'tasks.id ) as events_count')
)
->offset($limit_start)
->take($tasks_per_page)
->get()
в
$taskList = Task
::getByIsHomepage($is_homepage)
->getByStatus($viewedTasks)
->leftJoin('users', 'users.id', '=', 'tasks.leader_id')
->leftJoin('categories', 'categories.id', '=', 'tasks.category_id')
->orderBy('tasks.' . $order_by, $order_by_direction)
->select(
'tasks.*',
'users.name as leader_name',
'categories.name as category_name',
'categories.slug as category_slug'
)->addSelect(['events_count' => Event::count('id')
->whereColumn('events.task_id', 'tasks.id')
])
->offset($limit_start)
->take($tasks_per_page)
->get()
и получил ошибку:
Symfony\Component\Debug\Exception\FatalThrowableError
Call to a member function whereColumn() on integer
Какой правильный путь?
MODIFIED
Я переделал как:
$taskList = Task
::getByIsHomepage($is_homepage)
->getByStatus($viewedTasks)
->leftJoin('users', 'users.id', '=', 'tasks.leader_id')
->leftJoin('categories', 'categories.id', '=', 'tasks.category_id')
->orderBy('tasks.' . $order_by, $order_by_direction)
->select(
'tasks.*',
'users.name as leader_name',
'categories.name as category_name',
'categories.slug as category_slug'
)->addSelect(['events_count' => Event
::whereColumn('events.task_id', 'tasks.id')
->count('id')
])
и получил ошибку
:
Illuminate\Database\QueryException
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'tsk_tasks.id' in 'where clause' (SQL: select count(`id`) as aggregate from `tsk_events` where `tsk_events`.`task_id` = `tsk_tasks`.`id`)
, и это странно для меня, так как у меня есть таблица tsk_tasks с полем id. Как это исправить?
Спасибо!