参考
https://laravel.com/docs/5.1/eloquent#retrieving-single-modelsSELECTもいろいろある
find
- プライマリーキーでマッチした1レコードを取得する
- 戻り値はモデルのインスタンス(stdClass)
- 0件の場合は、null
$flight = Flight::find(1);
first
- 条件にマッチした最初の1レコードを取得する
- 戻り値はモデルのインスタンス(stdClass)
- 0件の場合は、null
$flight = Flight::where('active', 1)->first();
get
- 条件にマッチした全てのレコードを取得する
- 戻り値は、配列(各レコードはstdClassオブジェクトのインスタンス)
- 0件の場合は、オブジェクトが返る
$flight = Flight::where('active', 1)->get();
all
- 全てのレコードを取得する
- 戻り値は、配列(各レコードはstdClassオブジェクトのインスタンス)
- 0件の場合は、オブジェクトが返る
$flight = Flight::all();
0件の場合の評価の違い
$flight = Flight::find(1); if (!$flight ) { // 通る } $flight = Flight::where('id', 1)->first(); if (!$flight ) { // 通る } $flight = Flight::where('id', 1)->get(); if (!$flight) { // 通らない (オブジェクトが戻り値のため) } if (!count($flight)) { // 通る Countableインターフェース } $flight = Flight::where('id', 1)->get()->toArray(); if (!$flight) { // 通る (オブジェクトを配列に変換したため) } if (!count($flight)) { // 通る } $flight = Flight::all(); if (!$flight) { // 通らない (オブジェクトが戻り値のため) } if (!count($flight)) { // 通る Countableインターフェース }
まとめ
- get(), all()の場合は、0件の場合もオブジェクトが返る。
- Objectはtrueということと、1件または複数レコード(get()を使うか)を意識して書けばよさそう。
- Illuminate\Database\Eloquent\Collectionは、継承しているクラスがCountableインターフェースを実装していてcount()でitemsの件数が取れる。
Illuminate\Database\Eloquent\Collection Object ( [items:protected] => Array ( ) )
参考になります!
返信削除