CakePHP3.2系で検証
なんか条件を付けて最初の1件目を配列で取得したいといことで、以下のような感じで書きました
$data = $this->Model名->find('all')->where([なんか条件])->first()->toArray();
とすると、存在するレコードの場合はいいんですが、存在しないレコードの場合は、こんな感じのエラーになりました。
Call to a member function toArray() on null
該当するレコードがないと、first()の段階でオブジェクトが存在しないので、toArray()ができないっぽいです。
いや、なかったらなかったでからnullなりfalseなり空行列なり返してくれればいいんですけど・・・。
いろいろ試したのですが、こんな感じにするしかないようです。
$data = []; $model_entity = $this->Model名->find('all')->where([なんか条件]); if($model_entity->count()){ //isEmpty()っていうメソッドもある $data = $model_entity->first()->toArray(); }
CakePHP2のころだと、1行で取得できたのですが、CakePHP3だといちいちオブジェクトを変数に落としてそこで判定しないといけない。
多分、ポインタだからメモリは消費しないと思うけど、テンポラリな変数名がどんどん増えちゃうのがすごく嫌いなんですよね。
toArray()しないでオブジェクトのまま使えばいいっちゃいいんですが、どっちにしても判定が必要だから、手間は変わらないですね。
なんかめんどくさいですね・・・。