背景
最近laravelを仕事で使った。
で、Eloquentに対しての集計方法が一歩理解できたのでそのメモ
なんとなく使えるのがフレームワークの良いところ(?)
そこに至った経緯
なんかエラーでる
他の箇所ではこんな感じで使えていた気がするのに・・・
$result = Model::where->('id', 1)->get();
echo $result->name; //Property [name] does not exist on this collection instance
eloquentの集計概念
Model::find(1);
これは主キーが"1"に一致したものをSELECTするので
必ず一つ(以下)のデータしか集計しない
→modelで返す
Model::where->('id', 1)->get();
これは"id"といったカラムが"1"のものをSELECTするので
複数のデータを集計することがある(主キーを指定しているわけではないので)
→collectionで返す
Model::where->('id', 1)->first();
これは"id"といったカラムが"1"のものをSELECTして
最初に見つかったものを返すので必ず一つしかデータを集計しない
→modelで返す
Model::find([1, 2]);
配列でfindした場合である。
これは主キーが"1"もしくは"2"に一致したものをSELECTするので
必ず複数のデータを集計する
→collectionで返す
上記、厳密には一致するデータ見つからなかったりしてnullが返ることもあるが、
概ねこれを意識していればちょっと進んだ扱いができるかと思う。
つまり上のエラーは
Collectionからプロパティにアクセスしようとしていたんですね。
そう、getとfindとか場当たりに使っていたので
うまくいったりいかなかったりしていたんですね。