#php #laravel #laravel-query-builder
#php #laravel #laravel-конструктор запросов
Вопрос:
HomeController.php
public function index()
{
$employees = DB::table('timings')
->distinct()
->selectRaw("timings.employee_id, min(time_logged) AS minTime, max(time_logged) AS maxTime")
->leftJoin('employees','timings.employee_id','=','employees.employee_id')
->where( DB::raw('cast(time_logged AS date)') , DB::raw('CURDATE()'))
->groupBy('timings.employee_id', DB::raw('cast(time_logged AS date)') )
->get();
return view('home',compact('employees'));
}
Фактический SQL
employee_id | minTime | maxTime
1 2019-03-25 09:00:00 2019-03-25 14:00:00
...
Результат
Array (
[0] => stdClass Object (
[employee_id] => 1
[minTime] => 2019-03-25 09:00:00
[maxTime] => 2019-03-25 14:00:00
)
...
По какой-то причине MYSQL принимает соединение по левому краю, но ничего не происходит! У меня есть 2 таблицы, сотрудники и тайминги. Включаю ли я leftJoin или комментирую его, код работает, но таблица EMPLOYEE не отображается. Я понятия не имею, почему это не работает.
Комментарии:
1. Какой фактический SQL сгенерирован? Пожалуйста, опубликуйте это.
2. @Dai добавлено при редактировании
3. @NazarAbubaker вы все еще не включили сгенерированный SQL.
4. Это SQL, который он генерирует:
select distinct timings.employee_id,min(time_logged) AS minTime,max(time_logged) AS maxTime from `timings` left join `employees` on `timings`.`employee_id` = `employees`.`employee_id` where cast(time_loggedASdate) = CURDATE() group by `timings`.`employee_id`, cast(time_loggedASdate)
5. Вы забыли добавить в запрос селекторы столбцов first name, lastname и avatar? в selectRaw().
Ответ №1:
Вы не выбрали детали из employee
таблицы
->selectRaw("timings.employee_id, min(time_logged) AS minTime, max(time_logged) AS maxTime,employees.first_name, employees.last_name")