Eloquent:利用の開始 5.6 Laravel
Eloquent ORM(Object Relational Mapping)はPHPのフレームワークlaravelで実装されているSQLによるデータ操作をするモデル部分のことです。laravelでモデルを記述する際、多くの場合で以下の様に継承をします。
use Illuminate\Database\Eloquent\Model; class Flight extends Model { // }
このIlluminate\Database\Eloquent\Model;の中にあるCRUDに使える特に便利な機能を少し紹介します。少し詳しくは冒頭のリンクの説明書、とても詳しくはソースコード参照です。laravelのソースコードはとても丁寧で読みやすいためソースコードだけでも理解が進みます。
全件取得をする時は次の様に記述できます。
$flights = Flight::all();
これでSELECT * FROM Flights;の結果をCollection(配列の拡張形式)に変換した相当です。カラムを絞ることも簡単です。
$flights = Flight::all('primary_key', 'created_at');
これでSELECT primary_key,created_at FROM Flights;の結果をCollection(配列の拡張形式)に変換した相当です。この様によく使われるパターンにはシンプルな回答が大体用意されています。
ある1件を主キーを頼りに取得する時は次の様に記述できます。
$flight = Flight::find(1);
これでSELECT * FROM Flights WHERE id = 1;の結果をモデルクラスFlightに変換した相当です。findした場合、対象が存在しないことも考えられます。そのためfindOr***の形で処理が用意されています。
$flight = Flight::findOrFail(2); $flight = Flight::findOrNew(2);
前者は見つからなかった場合、404エラーがユーザに返されます。後者は見つからなかった場合、新たにレコードを作成します。
レコードを作成する時は次の様に記述できます。
$new_flight = [ 'name' => 'hoge', 'mail' => 'fuga@example.com' ]; Flight::create($new_flight);
create([‘カラム名’=>値の連想配列])これだけで新たにレコードがFlightsテーブルに追加されます。
更新する時は次の様に記述できます。
$update_data = [ 'name' => 'fuga', ]; $flight = Flight::findOrFail(1); $flight->fill($update_data)->save();
これもcreateに似ています。fillでは渡されたカラム名のデータのみを更新します。createと違ってこちらはより複雑な操作を繰り替えすことも考えられており、save()と命令する必要があります。
論理削除をする時はモデルにtraitを増やす必要があります。増やさない場合は物理削除です。
class Flight extends Model { use SoftDeletes; }
実際に削除する時は次です。
$flight = Flight::findOrFail(1); $flight->delete();
これで作成、読み取り、更新、削除でCRUD制覇です。いずれも非常にシンプルに記述でき、大変便利です。