CakePHP: 対象データがなかった場合のFindとFindAllにおける戻り値の違い

11:27 am CakePHP

CakePHP で使うモデルのメソッド Find と FindAll で、対象データがなかった場合は戻り値が少し違う。

Find と FindBy の場合、対象データがなかったら false が返ってくる。

それに対して FindAll と FindAllByの場合は false ではなく空の配列が返ってくる。

ということはどういうことかというと、

if (!$this->User->FindAllById($id)) {
    //対象データがなかった場合の処理
}

なら期待どおり動くが

if ($this->User->FindAllById($id) === false) {
    //対象データがなかった場合の処理
}

ではダメということ。

Find, FindBy なら false が返ってくるからどっちでもいける。

対象データの存在確認をするなら findCount で調べればいいわけで、そのために findAll を使うことはないかもしれないけど、例えば

$users = $this->User->FindAllByGroupId($group_id);
if ($users === false) {
    //対象データがなかった場合の処理
}

は、ついやってしまいそうな気がする。しない?

Leave a Comment

Your comment

You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Please note: Comment moderation is enabled and may delay your comment. There is no need to resubmit your comment.