Eloquentとは
Eloquent ORMとはLaravelで実装されているデーターベース操作のための機能。
すべてのEloquentモデルは Illumination\Database\Eloquent\Model
を継承する。
そもそもORMとは
ORM・・・Object-relational mapping
オブジェクト関係マッピング(英: Object-relational mapping、O/RM、ORM)とは、データベースとオブジェクト指向プログラミング言語の間の非互換なデータを変換するプログラミング技法である。 オブジェクト関連マッピングとも呼ぶ。
Wikipediaより
-
オブジェクト指向プログラミングとRDBとの考え方の違いを変換してつないでくれるもの。
- 考え方の違いを「インピーダンス・ミスマッチ」 という
-
本来RDBからの値はオブジェクト指向プログラミングとは互換性がないがそれを変換して使いやすくしてくれることになる。
とりあえず自分がわかる範囲でまとめました…。
Laravelにおけるデータベース操作
①Eloquent ORM
②クエリビルダ
Eloquentを使用するにはuseするモデル名を宣言する必要がある。
クエリビルダを使用する場合には加えてDBファザードをuse宣言する必要がある。
本題
使用するサンプル
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Flight extends Model
{
//
}
テーブルの定義
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Flight extends Model
{
/**
* モデルと関連しているテーブル
*
* @var string
*/
protected $table = 'my_flights';
}
主キー
- 主キーは
id
カラムであると想定している。
これをオーバーライドするにはprotectedのprimaryKey
プロパティを定義する。
タイムスタンプ
-
データベース上にあるcreated_atカラムとupdated_atカラムを自動的に更新する。
-
自動的に更新してほしくない場合は
$timestamps
をfalse
にする。 -
タイムスタンプのフォーマットをカスタマイズするなら
$dataFormat
プロパティを設定する。 -
タイムスタンプを保存するカラム名をカスタマイズする必要があるなら、モデルに
CREATED_AT
とUPDATED_AT
定数を設定する。
データベース接続
デフォルトでは.envに定義されているデータベースに接続されるが、それと異なる接続をしたいときは$connection
プロパティを使用する。
デフォルト属性値
あるモデルの属性にデフォルト値を指定したい場合は、$attributes
プロバティを定義する。
モデルの取得
各Eloquentモデルは対応するデータベースへ接続できたときクエリビルダとして使用できる。
コレクション
複数の結果を取得するall
やget
はIlluminate\Database\Eloquent\Collection
インスタンスを返す。
多次元配列で返されるため、アロー演算子ではプロパティの取得ができない。
単レコードの取得
-
単一レコードで取得した場合は
Model
オブジェクトで値を返す。 -
アロー演算子で中身のプロパティの取得ができる。
主キーで指定したモデル取得:find
$flight = App\Flight::find(1);
クエリ条件にマッチした最初のモデル取得:first
$flight = App\Flight::where('active', 1)->first();
クエリ条件にマッチした最初のモデル取得の短縮記法:firstWhere
$flight = App\Flight::firstWhere('active', 1);
fillable
とguarded
の違い
両方とも入力値を反映したくないときに使う。
fillble
→ 指定したカラムのみ値が入力される。
guarded
→ 指定したカラムには値が入力されない。
おわりに
だいぶ駆け足でまとめたのでだいぶ中身が薄っぺらくなってしまいましたが、いままで何となく使っていたものが
ここまで奥深いとは思いませんでした。(正直何も疑問に思わずに手を動かしていた)
これをきっかけにまた詳しく学んでいきたいと感じました!
参考