2017-09-27 9 views
0

私はLaravelの新機能ですが、EloquentはYiiのActiveRecordとほぼ同じです。SelectRaw()がLaravel 5.5で機能しないEloquentが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をselectクエリの中で試してみましたが、うまくいきません。

答えて

0

これで大丈夫です。選択クエリに主キーを追加するのを忘れました!

関連する問題