Laravel 5.8 で Eloquentを使用してSQLを作成しています。
元々は
mySQL
1SELECT 2 hoge1_column 3 , hoge2_column 4 , hoge3_column 5 , LEAST( COALESCE( MIN( hoge1_flg ), 99 ), COALESCE( MIN( hoge2_flg ), 99 ), COALESCE( MIN( hoge3_flg ), 99 ) ) AS hoge_status 6FROM 7 hoge 8LEFT JOIN 9 hoge1 ON hoge.fuga = hoge1.fuga 10LEFT JOIN 11 hoge2 ON hoge.fuga = hoge2.fuga 12LEFT JOIN 13 hoge3 ON hoge.fuga = hoge3.fuga 14WHERE 15 hoge_flg = 1 16GROUP BY 17 hoge1_column 18HAVING 19 hoge3_column = 1 OR ( hoge2_column = 0 AND hoge_status = 1 );
だったのですが、having以降の条件をscopeに出すために下記のようにEloquentで作成しました。
Eloquent
1self::selectRaw( 'hoge1_column, hoge2_column, hoge3_column' ) 2 ->selectRaw( 'LEAST( COALESCE( MIN( hoge1_flg ), 99 ), COALESCE( MIN( hoge2_flg ), 99 ), COALESCE( MIN( hoge3_flg ), 99 ) ) AS hoge_status' ) 3 ->leftJoin( 'hoge1', 'hoge.fuga', '=', 'hoge1.fuga' ) 4 ->leftJoin( 'hoge2', 'hoge.fuga', '=', 'hoge2.fuga' ) 5 ->leftJoin( 'hoge3', 'hoge.fuga', '=', 'hoge2.fuga' ) 6 ->groupBy( 'hoge1_column' ) 7 ->get();
ここで条件を付加するために
Eloquent
1having( 'hoge3_column', '=', '1' )
を追加したところ Unknown column が出たため
Eloquent
1where( 'hoge3_column', '=', '1' )
とwhereを使うようにstackovweflowで見かけたため、変更しました。
そちらは上手くいったのですが、
hoge_statusを使うために
Eloquent
1havingRaw( 'hoge2_column = 0 AND hoge_status = 1' )
としたところUnknown column が出ます。
whereRawに変えても同様のエラーがでます。
上記の条件を付加せずに取得したCollectionのModelのattributeには hoge2 も hoge_statusも存在します。
どのようにwhere条件またはhaving条件を書けばよいでしょうか?
回答1件
あなたの回答
tips
プレビュー