2016-04-04 26 views
1

Ç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?

+0

5.2'ye yükseltin, geçmiştasınız! –

+0

Yine de aynı sorunları olurdu. Bunun için DB :: raw kullanan – cookavich

+0

TBH, sizin için daha az baş ağrısı olacaktır. –

cevap

1

Pekala, sorunumu tam olarak anlamadan problemimi çözdüm. $query->select('meters.*');, bunu ekleyerek bunu çözmüştür. Yine, neden emin değilim. Benim anlayışım, bir modelin ilişkilerini değil belirli bir tablonun sütunlarını seçmektir.

Her neyse, şimdi çalışıyor.