😀
Laravel Eloquent ORMでデータを取得するときの注意点
はじめに
laravelでデータベースからデータを取得し、そのデータを利用しようとした時にうまく扱えなかったので、整理も含めて記載していきます。
ここでは、laravelのEloquentでのデータ取得に絞って記載します。
Eloquent ORMとは
Eloquent ORMはLaravelに含まれている、美しくシンプルなアクティブレコードによるデーター操作の実装です。それぞれのデータベーステーブルは関連する「モデル」と結びついています。モデルによりテーブル中のデータをクエリできますし、さらに新しいレコードを追加することもできます。
Laravel 5.7 Eloquent:利用の開始
Eloquentが複数のレコードをリターンする場合Illuminate\Database\Eloquent\Collectionオブジェクトが返されます
Laravel 5.7 Eloquent:コレクション
つまり、
- EloquentはlaravelのORM(オブジェクト関係マッピング)
- laravelでデータベースを操作できるようにしている
- 返されるデータはコレクション型である
use Illuminate\Database\Eloquent\Model;
class Test extends Model
上記のように記載したモデルによって、データベース操作を簡単な記述で行うことができる。
コレクション型とは
Laravel独自の型。(オブジェクト型の一種)
データベースからデータを取得した際等はこの型。
コレクションで利用可能なメソッドは全部で100個以上あります。メソッドチェーンで記述が可能です。
つまり、
- DBから取得したデータを簡単に操作できる型
- オブジェクト型と同じ = 配列型ではないという事
データを取得する時に気をつけること
-
取得されるデータは基本的にはコレクション型である
- これが大事。取得したデータを、すぐに配列のように操作しようとしてうまくデータが取り出せないことが起こる。それもそのはず。取得されるデータがコレクション型であった。
-
そのコレクション型を配列に変換することができる
- Eloquentには様々なメソッドがあり、特定のメソッドを使うことで、コレクション型を配列に変換することができる。使えるメソッドは公式HPを見ればわかる。
さいごに
クエリビルダとEloquentは異なる
Laravelのデータ取得方法は主に上記の二つを使うことになるが、
そもそも上記の二つは似てるようで違う。
この記述は別で記載するが、そもそも別であることの認識を持っておくことが大事。
調べても混乱していた原因は、コレクション型と配列の違い、クエリビルダとEloquentの違いを認識していなかった為でした。
Discussion