LoginSignup
0
0

More than 3 years have passed since last update.

FuelPHPのORMでor演算子を2個以上つなげると後勝ちで1つのorしか判定されていなくてハマった話

Last updated at Posted at 2020-01-20

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件以上をそのままつなげるのは注意が必要そうです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0