2016-04-04 92 views
1

我正在處理從各種關係中輸出的數據表。Laravel 4.2根據雄辯的關係問題排序

大部分數據來自meters表,其中有一個Meter模型,但其中一些數據是通過關係從其他表中提取的。例如,我在排序calibrations表時遇到問題。

該數據表有可排序的列,工作得很好。基於其他關係進行排序的列具有連接,以便在沒有任何查詢錯誤的情況下進行排序。

除了一個,last_calibration_date之外,所有的排序和連接工作。

沒有列名爲last_calibration_date。實際上,每個meter可能有多個校準。

Meter模型我搶通過calibration_datelast_calibration_datecalibrations表是這樣的:

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

+0

升級到5.2,你已經過去了! –

+0

仍然會有同樣的問題。 – cookavich

+0

使用DB :: raw的TBH對於你來說不會讓你頭疼。 –

回答

1

好吧,好吧,我似乎已經解決了我的問題,卻不明白爲什麼。

if ($sort == 'last_calibration_date') 
{ 
    $query->select('meters.*'); 
    $query->join('calibrations as calibration', 'calibration.meter_id', '=', 'meters.id'); 
    $sort = 'calibration.calibration_date'; 
} 

添加$query->select('meters.*');已解決它。再次,不知道爲什麼。我的理解是選擇一個特定的表格列,而不是模型的關係。

無論如何,它現在工作。