FuelのORMで参照クエリをOR
で発行する場合、以下のような条件でphpの処理的にハマった件をメモします。
'where' => [
[
['hoge', '>=', 1],
'or' =>
['hoge', '=', 0],
'or' =>
['hoge', '=', null],
],
],
というような条件で書いていると以下のようなselect文になるのかと思っていた。
// 想定していた発行クエリ
WHERE
(t0.hoge >= 1 OR t0.hoge = 0 OR t0.hoge IS null)
が、実際に発行されたクエリは以下でした。
// 実際に発行されていたクエリ
WHERE
(t0.hoge >= 1 OR t0.hoge IS null)
……!!!
OR条件の2つ目で上書きされてあと勝ちになっているようだ。。
php的に連想配列のキーが1つなのでorのキーで後勝ちになっているのかなと予想。
今回はデータ構造的にnullableにする必要がないテーブルだったので制約で解決しました。
ORで2件以上をそのままつなげるのは注意が必要そうです。