Целью активной загрузки является уменьшение количества запросов БД, если я не ошибаюсь. Но если добавить следующее к моему примеру построитель запросов, он создает дополнительный SQL запрос для каждой записи возвращается:Нежелательная загрузка не работает
->with([
'firstEarmark' => function($q) {
$q
->select('earmarks.*')
->join('locations', 'locations.id', '=', 'earmarks.location')
->select('earmarks.*', 'locations.location AS earmarked_location')
->where('date', '>=', date('m/d/Y'))->orderBy('date', 'asc')
->get();
}
Он делает это с или без присоединиться к заявлению.
Так что я пропущу точку нетерпения, или я делаю это неправильно?
Моя вторая (слегка несвязанная) проблема заключается в том, что если я включаю комментарий commented -> select(), этот подзапрос не дает результатов по какой-либо причине.
Фактически, Laravel генерирует один и тот же SQL-запрос для каждой записи. Если есть два результата для ноутбука, я получаю два одинаковых запросов, чтобы вытащить первую запись Earmark для каждого:
113 Prepare select `earmarks`.*, `locations`.`location` as `earmarked_location` from `earmarks` inner join `locations` on `locations`.`id` = `earmarks`.`location` where `earmarks`.`laptop_id` in (?, ?) and `date` >= ? order by `date` asc
113 Execute select `earmarks`.*, `locations`.`location` as `earmarked_location` from `earmarks` inner join `locations` on `locations`.`id` = `earmarks`.`location` where `earmarks`.`laptop_id` in (1, 2) and `date` >= '11/04/2016' order by `date` asc
113 Close stmt
113 Prepare select `earmarks`.*, `locations`.`location` as `earmarked_location` from `earmarks` inner join `locations` on `locations`.`id` = `earmarks`.`location` where `earmarks`.`laptop_id` in (?, ?) and `date` >= ? order by `date` asc
113 Execute select `earmarks`.*, `locations`.`location` as `earmarked_location` from `earmarks` inner join `locations` on `locations`.`id` = `earmarks`.`location` where `earmarks`.`laptop_id` in (1, 2) and `date` >= '11/04/2016' order by `date` asc
Эти запросы идентичны!