私は様々な関係から出力しているデータテーブルを使って作業しています。Laravel 4.2並べ替えの関係による並べ替え
ほとんどのデータはmeters
テーブルから得られますが、テーブルはMeter
ですが、一部はリレーションシップによって他のテーブルから引き出されます。たとえば、calibrations
テーブルによるソートに関する問題があります。
データテーブルには、正常に動作するソート可能な列があります。他のリレーションシップに基づいてソートする列には、結合エラーがなくソートされるように結合があります。
並べ替えと結合はすべて、last_calibration_date
を除いてすべて動作します。
last_calibration_date
という列はありません。実際、各meter
は複数のキャリブレーションを持つことができます。
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エラーを返します:私はcalibration_date
塔を介してcalibrations
テーブルからこの方法をlast_calibration_date
をつかむMeter
モデルで
あなたはそれをソートしないでソートしようとします。ここで
参加で私の試みです:
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
で並べ替える別の方法ですか?
5.2にアップグレードすると、過去の状態になります。 –
でも同じ問題があります。 – cookavich
TBH:これはDB :: rawを使用することで頭痛が軽減されます。 –