Çeşitli ilişkilerden çıkarım yaptığım bir veri tabanı ile çalışıyorum.Laravel 4.2 Sıradan İlişki Sorunlarına Göre Sırala
Verilerin çoğu, Meter
modeline sahip olan meters
tablosundan gelir, ancak bazıları ilişkilerle diğer tablolardan alınır. Örneğin, calibrations
tablosuna göre sıralama ile ilgili bir sorun yaşıyorum.
Veritabanında düzgün çalışabilen sıralı sütunlar var. Diğer ilişkilere dayalı olarak sıralanan sütunlar, herhangi bir sorgu hatası olmadan sıralanacak şekilde birleştirmeler içerir.
Tüm sıralama ve birleştirme işlemi, bir, last_calibration_date
hariç.
last_calibration_date
adı verilen sütun yok. Aslında, her bir meter
, birden fazla kalibrasyona sahip olabilir. Meter
modelde
Ben calibration_date
sütunu kullanarak calibrations
tablodan last_calibration_date
bu şekilde kapmak: Ben last_calibration_date
sütuna göre sıralama değilim zaman
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');
}
Bu süper çalışır, ancak bir sql hatası varsa döndürür Birleştirme olmadan buna göre sıralamaya çalışın.
İşte katılmak benim girişimi var:
if ($sort == 'last_calibration_date')
{
$query->join('calibrations', 'calibrations.meter_id', '=', 'meters.id');
$sort = 'calibrations.calibration_date';
}
bu aynı zamanda gerçek last_calibration_date
dönmez bir hata döndürür etmese de. Sadece biraz daha bilgi
, calibrations
tablo önceden söyleniyordu gibi Yani, herhangi bir metre birden kalibrasyonları gerekebilir böylece
calibrations
- id
- calibration_date
- next_calibration_date
- meter_id
gibi ayarlanır.
Birleştirme sırasında Meter
yöntemimi nasıl kopyalayabileceğime dair herhangi bir fikir var mı? Ya da belki last_calibration_date
ile sıralama başka bir yolu?
5.2'ye yükseltin, geçmiştasınız! –
Yine de aynı sorunları olurdu. Bunun için DB :: raw kullanan – cookavich
TBH, sizin için daha az baş ağrısı olacaktır. –