2017-09-27 128 views
0

對於Laravel,我幾乎是新手,但Eloquent與Yii的ActiveRecord非常相似,我非常熟悉它。SelectRaw()在Laravel中不起作用5.5如果它包含在with()函數中,就能夠提供語言

我試圖從表中獲取行,我已經定義了關係,並且它運行良好。它將返回所有值,除了使用selectRaw函數時。

return $this->select('id', 'name', 'longitude', 'latitude')->with([ 
     'dailyWaterLevel' => function($dailyWaterLevel) { 
      $dailyWaterLevel->select('id', 'dams_id', 'excel_identifier', 'rwl', 'rc', 'sl', 'nhwl', 'lwl') 
       ->whereRaw('MONTH(str_to_date(excel_identifier, "%m")) = ?', [date('m')]) 
       ->whereRaw('id in (select max(id) from dams_details where dams_id = dams_id and MONTH(str_to_date(excel_identifier, "%m")) = ? group by excel_identifier, dams_id)', [date('m')]) 
       ->orderBy('excel_identifier', 'desc') 
       ->orderBy('created_at', 'desc'); 
     }, 'lowestWaterLevel' => function($lowestWaterLevel) { 
      $lowestWaterLevel->select('id', 'dams_id', 'excel_identifier', 'rwl') 
       ->orderBy('rwl', 'asc') 
       ->orderBy('excel_identifier', 'desc') 
       ->orderBy('created_at', 'desc'); 
     }, 'highestWaterLevel' => function($highestWaterLevel) { 
      $highestWaterLevel->select('id', 'dams_id', 'excel_identifier', 'rwl') 
       ->orderBy('rwl', 'desc') 
       ->orderBy('excel_identifier', 'desc') 
       ->orderBy('created_at', 'desc'); 
     }, 'averageMonthlyWaterLevel' => function($averageMonthlyWaterLevel) { 
      $averageMonthlyWaterLevel->selectRaw('DATE_FORMAT(str_to_date(excel_identifier, "%m-%d-%Y"), "%m-%Y") as month_year, format(avg(rwl), 2) as average_rwl') 
       ->whereRaw('YEAR(str_to_date(excel_identifier, "%m-%d-%Y")) = ?', [date('Y')]) 
       ->groupBy(DB::raw('DATE_FORMAT(str_to_date(excel_identifier, "%m-%d-%Y"), "%m-%Y")')) 
       ->orderBy('excel_identifier', 'desc'); 
     }])->get()->toArray(); 

正如你可以看到我有一些關係的原始SQL函數,他們的工作。除「averageMonthlyWaterLevel」關係外。

我在關係子句之外嘗試了它,它起作用。但是每當我把它放在一個關係條款裏面,它都不起作用。我也在選擇查詢中嘗試了DB :: raw,並且它不工作。

回答

0

現在沒關係,我只是忘了在選擇查詢中添加主鍵!

相關問題