【Laravel】Eloquent
※下記の内容に不備がありましたら、コメント頂けると幸いです。また、下記の内容をご使用頂ける場合は自己責任でお願いします。
【目次】
背景
Laravelで初めて知った「Eloquent」について記事にします。
必要最低限のことだけを調べたので、深い内容は書いていません。
内容
「Eloquent」とは?
Eloquent ORM(Eloquent Object Relational Mapping)とは、モデルとデータベースを関連付け、データ操作をできるようにするLaravel独自のO/Rマッパーです。
Railsだと以前記事にした「【Rails】Active Record - 大田区から発信するゆるゆる日記」がこれに該当します。
O/Rマッパーなどの説明もRailsの記事に書かれていますので、もしよければ参考にしてみてください。
使用方法
Eloquentモデルを作成(モデル定義)し、メソッドを実行することで、データベースのデータを操作します。
1.Eloquentモデル作成
$ php artisan make:model User #--migrationオプションを利用すると、マイグレーションも生成可能
※全てのEloquentモデルは、vendor/laravel/framework/src/Illuminate\Database\Eloquent\Modelを拡張する必要があります。
Laravel 5.3 ディレクトリ構造
Laravelを学習し始めるとき、多くの開発者はmodelsディレクトリが存在しないことに戸惑います。しかし、意図的にこのディレクトリを用意していません。多くの別々の人達にとって、その意味合いは様々なため、"models"という言葉の定義は曖昧であることに私達は気づきました。ある開発者たちはすべてのビジネスロジックを総称してアプリケーションの「モデル」と呼び、一方で別の人達はリレーショナルデータベースに関連するクラスを「モデル」として参照しています。
このため、私達はEloquentモデルをデフォルトではappディレクトリ下へ設置することを選択し、開発者自分が選んだどこか別の場所へ設置してもらうことにしました。
2.モデルクラスの定義
Eloquentは、テーブルの主キーが「id」カラムであると想定しています。
また、デフォルトでタイムスタンプを自動的に更新します。
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Flight extends Model
{
/**
* モデルと関連しているテーブル
*
* @var string
*/
protected $table = 'my_flights'; #テーブル名がクラス名の複数形ではない場合に記入
/**
* モデルで使用するコネクション名
*
* @var string
*/
protected $connection = 'connection-name';
#アプリケーションに設定されているデフォルトのデータベース以外に接続したい場合に記入
}
3.データの取得
<?php
use App/Flight;
$flights = App\Flight::all(); #全レコードを取得
foreach ($flights as $flight) {
echo $flight->name;
}
※参考資料:データベース:クエリビルダ 5.5 Laravel
4.モデルの追加
新しいインスタンスを作成し、saveメソッドを実行する。
<?php
namespace App\Http\Controllers;
use App\Flight;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class FlightController extends Controller
{
/**
* 新しいflightインスタンスの生成
*
* @param Request $request
* @return Response
*/
public function store(Request $request)
{
// リクエストのバリデート処理…
$flight = new Flight;
$flight->name = $request->name;
$flight->save();
}
}
5.モデルの更新
saveメソッドは更新にも使用できます。
まずはデータを取得し、更新したい属性をセットしてからsaveメソッドを実行します。
$flight = App\Flight::find(1);
$flight->name = 'New Flight Name';
$flight->save();
6.モデルの削除
$flight = App/Flight::find(1);
$flight->delete();
今後に向けて
既存のコードを解読しながら理解を深めていきます。
ルーティングとコントローラも記事にまとめようかな?
参考
素晴らしい記事に感謝いたします。