Eloquentって?
Laravelに含まれている美しくシンプルなアクティブレコードによるデーター操作の実装です。
と書いてありますが、言ってしまえばデータベースのテーブルの内容をModelとして扱える便利な機能です。
使い方
モデルを作る
ここではlaravelの公式を参照してみましょう.
php artisan make:model Flight
このコマンドでFlightモデルを作ることができます。
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Flight extends Model
{
//
}
こんな感じのファイルが生成されます。ここでnamespace
は名前空間というもので、今後このFlightモデルを使うときは
App\Flight
で使うことができるようになります。
現在のままでは単に空のモデルを作っただけです。そこでflightsテーブルの内容を紐付けてみます。
flightテーブルには
- id
- datetime
- name
- company
- from
- to
というカラムが存在するとします。
飛行機の便みたいなものを想像してください。
紐付けましょう。こうなります。
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Flight extends Model
{
/**
* モデルと関連しているテーブル
*
* @var string
*/
protected $table = 'flights';
}
これで完了です。
Create
それではテーブルにデータを挿入してみましょう。ここでidは主キーかつauto_incrementとします。
$obj = new App\Flight;
$obj->datatime = '2019-01-01';
$obj->name = 'NH01';
$obj->company = 'ANA';
$obj->from = 'NRT';
$obj->to = 'JFK';
$obj->save();
これで以下のようなデータが挿入されます。
id | datatime | name | company | from | to |
---|---|---|---|---|---|
1 | 2019-01-01 | NH01 | ANA | NRT | JFK |
Read
次にテーブルからデータを取得しましょう。
ここでは以下のようなテーブルを想定します。
id | datatime | name | company | from | to |
---|---|---|---|---|---|
1 | 2019-01-01 | NH01 | ANA | NRT | JFK |
2 | 2019-01-02 | JL01 | JAL | HND | LHR |
例えばID=2のものを取得したいときは以下のように書きます。
$obj = App\Flight::where('id',2);
たったこれだけです。
このあと、例えば
echo $obj->name; //「JL01」と出力される
のように利用すればOKです。
さらに
$flights = App\Flight:all();
foreach($flights as $flight) {
echo $flight->company."\n"; //ANA JALと出力される
}
みたいなことも可能です。
Update
続いてアップデートしてみましょう。
id | datatime | name | company | from | to |
---|---|---|---|---|---|
1 | 2019-01-01 | NH01 | ANA | NRT | JFK |
2 | 2019-01-02 | JL01 | JAL | HND | LHR |
例えばid=1のtoを変えたい、ときは以下のようにします。 |
$obj = App\Flight:where('id', 1);
$obj->to = 'DWC';
$obj->save();
するとテーブルは以下のようになります。
id | datatime | name | company | from | to |
---|---|---|---|---|---|
1 | 2019-01-01 | NH01 | ANA | NRT | JFK |
2 | 2019-01-02 | JL01 | JAL | HND | DWC |
簡単ですね。Createのnewがないだけです。
Delete
最後に消しましょう。
ここではdatetime >= 2019-01-01を削除します。
$obj = App\Flight::where('datetime','>=', '2019-01-01');
$obj = delete();
こうすることで
id | datatime | name | company | from | to |
---|
となります。where句をこのように使うこともできるわけですね。
他にも
$obj = App\Flight::find(1);
$obj = delete();
とすることで
id | datatime | name | company | from | to |
---|---|---|---|---|---|
2 | 2019-01-02 | JL01 | JAL | HND | DWC |
となります。主キーの場合find句を使えばwhere句よりも楽です。
終わりに
Eloquentはとても便利なものです。ここに書いてあることはあくまで触りです。
詳しくは
Laravel 5.7 Eloquent:利用の開始
Eloquent をおさらい
を御覧ください。