【FuelPHP】WHERE句のORをANDで括る方法

FuelPHPでWHERE句のORをANDで括る方法を説明します。

2種類ありますが、微妙にクエリが違うので必要に応じて変えてください。

使用する場合クエリの作りが違うので作り直す必要があるかもしれません。


ORM CRUDを使用する

<?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%')
 ),
)));

結果

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を使用したパターンですと前述した注意事項がありますがこちらは特に問題なく使えます。

<?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();

結果

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 件のコメント :

コメントを投稿