Edited at

CakePHP3 備忘録 | 値が「null」のレコードが抽出されない?


値が「null」のレコードが抽出されない?

findにて抽出時、アソシエーションした該当のテーブルオブジェクトが空。レコードはDB上に存在。

アソシエーションが影響している可能性大で、要検証。

where句で「null」のレコードだけを抽出して、Selectでそのカラムだけを表示しようとしている。

その際の、該当の「テーブルオブジェクト」が「空」になってしまう。


取り急ぎの対策

そもそも、コードを読まないのがいけないのか、MySQL的にそうなのかは後で検証するとして、結果的に「nullではない他のカラム」もselectすることで解決。

値がnullのカラムだけをfindしようとすると、オブジェクトごとなくなってしまう。


追記


2018年9月30日 - 正解はこちら

クエリービルダー / IS演算子,IS NOT演算子

whereメソッドの引数のキーにIS演算子、またはIS NOT演算子を利用することで型に応じたクエリが生成される。

NULLに限った場合は下記のようになる。


NULLの場合

->where('id IS' => null)


NOT NULLの場合

->where('id IS NOT' => null)