1

さまざまな関係から出力しているデータテーブルを使用しています。

ほとんどのデータはモデルmetersを持つテーブルから取得されますMeterが、一部はリレーションシップを介して他のテーブルから取得されます。たとえば、calibrationsテーブルによる並べ替えに問題があります。

データテーブルには、正常に機能するソート可能な列があります。他のリレーションシップに基づいて並べ替える列には結合が配置されているため、クエリ エラーなしで並べ替えることができます。

1 つを除いて、すべての並べ替えと結合が機能しlast_calibration_dateます。

という列はありませんlast_calibration_date。実際、それぞれmeterが複数のキャリブレーションを持つことができます。

モデルでは、次のように列 を介してテーブルからMeterを取得します。last_calibration_datecalibrationscalibration_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ですか?

4

1 に答える 1