さまざまな関係から出力しているデータテーブルを使用しています。
ほとんどのデータはモデルmeters
を持つテーブルから取得されますMeter
が、一部はリレーションシップを介して他のテーブルから取得されます。たとえば、calibrations
テーブルによる並べ替えに問題があります。
データテーブルには、正常に機能するソート可能な列があります。他のリレーションシップに基づいて並べ替える列には結合が配置されているため、クエリ エラーなしで並べ替えることができます。
1 つを除いて、すべての並べ替えと結合が機能し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
ですか?