Я работаю с таблицей данных, которую я вывожу из различных отношений.
Большая часть данных поступает из таблицы meters
с моделью Meter
, но некоторые из них извлекаются из других таблиц через отношения. Например, у меня проблема с сортировкой по таблице calibrations
.
В datatable есть сортируемые столбцы, которые отлично работают. Столбцы, которые сортируются на основе других отношений, имеют соединения, поэтому они сортируются без ошибок запроса.
Все сортировки и объединения работают, кроме одного, last_calibration_date
.
Нет столбца с именем last_calibration_date
. На самом деле у каждого meter
может быть несколько калибровок.
В модели Meter
я получаю last_calibration_date
из таблицы calibrations
через столбец calibration_date
следующим образом:
public function getLastCalibrationDateAttribute()
{
if (isset($this->relations['calibrations']) && $this->relations['calibrations']->count())
return $this->relations['calibrations']->sortBy('calibration_date', SORT_REGULAR, true)->first()->calibration_date->format('Y-m-d');
}
Это прекрасно работает, когда я не сортирую по столбцу last_calibration_date
, но возвращает ошибку sql, если вы пытаетесь отсортировать по нему без соединения.
Вот моя попытка присоединиться:
if ($sort == 'last_calibration_date')
{
$query->join('calibrations', 'calibrations.meter_id', '=', 'meters.id');
$sort = 'calibrations.calibration_date';
}
Хотя это не возвращает ошибку, оно также не возвращает фактическое last_calibration_date
.
Еще немного информации, таблица calibrations
устроена так
calibrations
- id
- calibration_date
- next_calibration_date
- meter_id
Итак, как было сказано ранее, любой счетчик может иметь несколько калибровок.
Любые идеи о том, как я могу воспроизвести мой метод Meter
в своем соединении? Или может быть другой способ сортировки по last_calibration_date
?