CakePHP3でdeletedがNULLのレコードを絞り込みたい
以前こんな記事を書きました。
CakePHP3でUsersテーブルにroleカラムを追加し、管理者と一般利用者で権限を分けたい - 29歳からエンジニア目指すブログ
論理削除されたユーザーでログインさせたくないという記事です。
こちらでも少し触れていますが、「deletedがNULLのレコードを選択したい」とかいうことがあると思います。
つまり、deletedがNULLであるレコードを選択したい、言い換えれば、論理削除されてないレコードを選択したい、ということですね。
この時の書き方はハマる方もいるので、書いていきます。
【自分の環境】
macOS Catalina
PHP7.4.2
CakePHP3.8
MAMP5.7
Apache2.2
MySQL5.7
書き方は「'Photos.deleted IS'=>NULL」みたいにする
実際に書き方を見ていきましょう。
例えば、Photosテーブルのデータ(写真)を絞り込みたいとします。
条件は「削除されていないこと」です。
つまりdeletedカラムがNULLということです。
以下のコードを書きました。
(該当のコントローラ)
$photos = $this->Photos->find('all',[ 'conditions'=>[ 'Photos.deleted IS'=>NULL, ], 'order'=>['id'=>'asc'], 'limit'=>10]);
findメソッドの説明は省略します。
ここではconditionsを使って絞り込んでいます。
「'Photos.deleted IS'=>NULL」とすることで、「PhotosテーブルのdeletedカラムがNULLであるレコードに絞る」という意味になります。
ポイントは「IS」を記述しているところです。
これを「'Photos.deleted'=>NULL」としても動きません。
注意したいところです。
終わりに
以上となります。
この「IS」を忘れることで上手く動かないということがありました。
NULLは特別な値なので、「IS」が必要になるみたいです。
その辺はデータベースやSQLを勉強するとわかってくるかもしれません。
もっといい書き方があったらコメントで教えてください。
ありがとうございました。