CakePHP の Model::find() の条件式 (NULL の扱い)
CakePHP 1.3 にて、 Model::find() の条件式で NULL の扱いを考慮する必要があった。
"IS NULL" を表現したい場合
条件式:
<?php $conditions = array('hoge' => null);
Where句:
WHERE "hoge" IS NULL
"IS NOT NULL" を表現したい場合
条件式:
<?php $conditions = array('NOT' => array('hoge' => null));
Where句:
WHERE NOT ("hoge" IS NULL)
"IS NULL" の他に別の値も OR 条件で指定したい場合
条件式:
<?php $conditions = array( 'OR' => array( array('hoge' => null), array('hoge' => '1') ) );
Where句:
WHERE (("hoge" IS NULL) OR ("hoge" = '1'))
ダメな例:
<?php $conditions = array( 'OR' => array( 'hoge' => null, 'hoge' => '1' // キーが重複している! ) );
PHP 的にはエラーにならないのだが、配列のキーが重複してしまうため、最後の「'hoge' => '1'」 しか効かない。