
FuelPHPでWHERE句のORをANDで括る方法を説明します。
2種類ありますが、微妙にクエリが違うので必要に応じて変えてください。
使用する場合クエリの作りが違うので作り直す必要があるかもしれません。
ORM CRUDを使用する
1 2 3 4 5 6 7 8 9 10 11 | <?php Model_Hoge::find( 'all' , array ( 'where' => array ( array ( array ( 'family_name' , 'like' , '%fuga%' ), 'or' => array ( 'family_name_kana' , 'like' , '%fuga%' ) ), array ( array ( 'first_name' , 'like' , '%piyo%' ), 'or' => array ( 'first_name_kana' , 'like' , '%piyo%' ) ), ))); |
結果
1 2 3 4 5 6 7 8 9 10 11 12 13 | SELECT * FROM hoge WHERE ( `hoge`.`family_name` LIKE '%fuga%' OR `hoge`.`family_name_kana` LIKE '%fuga%' ) AND ( `hoge`.`first_name` LIKE '%piyo%' OR `hoge`.`first_name_kana` LIKE '%piyo%' ) |
注意!
ORM CRUDを使用するパターンですと配列内の「or」が重複して最後の内容しか適用されないので、注意してください。
メソッドチェーンを使用する
上記のORM CRUDを使用したパターンですと前述した注意事項がありますがこちらは特に問題なく使えます。
1 2 3 4 5 6 7 8 9 10 11 12 | <?php Model_Hoge::query() ->and_where_open() ->where( 'family_name' , 'like' , '%fuga%' ) ->or_where( 'family_name_kana' , 'like' , '%fuga%' ) ->and_where_close() ->and_where_open() ->where( 'first_name' , 'like' , '%piyo%' ) ->or_where( 'first_name_kana' , 'like' , '%piyo%' ) ->and_where_close() ->get(); |
結果
1 2 3 4 5 6 7 8 9 10 11 12 13 | SELECT * FROM hoge WHERE ( `hoge`.`family_name` LIKE '%fuga%' OR `hoge`.`family_name_kana` LIKE '%fuga%' ) AND ( `hoge`.`first_name` LIKE '%piyo%' OR `hoge`.`first_name_kana` LIKE '%piyo%' ) |
0 件のコメント :
コメントを投稿