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クエリの中で試してみましたが、うまくいきません。