本記事では、Laravelについて
Eloquentについての解説をしていく
(Laravel) Eloquentとは
LaravelのEloquentとは、
Laravelに内蔵されている、ORMの機能のこと
Eloquentとモデル
Eloquentでは、
「モデル」というクラスを定義し、これを利用してデータベース操作を行うように設計されている。
モデルの作成
モデルの作成コマンドは以下
php artisan make:model モデル名
Peopleテーブルを操作するモデルを作成するなら、モデル名はPersonにする。
テーブル名が複数型なのに対して、モデル名は単数型にするという決まりがある。
モデルファイルの配置場所
下記フォルダにモデル名.phpというファイルが作成される。
app/
モデルファイルのデフォルトの記述
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Person extends Model
{
//
}
モデルに紐づくコントローラを作成する
作成したモデルクラスを使用するためには、
それに紐づくコントローラを作成する必要がある。
コントローラの作成書式は下記
php artisn make:controller 〇〇Controller
〇〇には、紐付けるモデルクラス名(単数形)を指定する。
作成したコントローラから、全レコードを取得する
use App\Person //Personクラスを使用
}
public function index(Request $request) {
$item = Person::all();
return view('person.index' , ['items' => $items]);
}
}
モデルクラス::メソッド名として実行する。
上記では「Personクラスの、allメソッド」を呼び出すことで、
peopleテーブルの全レコードを取得している。
なぜ「Person::」と書くだけで、「peopleテーブル」を自動的に対象にしてくれるかというと、laravelでは、モデルクラス(単数)に紐づくテーブル名(複数名)を引くというルールがあるから。
取得結果の全レコードは、実体はレコード管理クラスのインスタンスであり、
アロー演算子で、レコードの情報や、モデルクラスのメソッドにアクセス可能となる。
以下は、インスタンスから、レコード情報を取得する例
@foreach ($items as $item)
<tr>
<td>{{ $item->name }}</td>
<td>{{ $item->mail }}</td>
<td>{{ $item->age }}</td>
</tr>
@endforeach
モデルクラスを拡張する
モデルクラスはプロパティやメソッドを独自に拡張することができる。
作成したモデルクラス内にメソッドを追記する
//例
public function getId()
{
return $this->id
}
作成したメソッドは、モデルクラスインスタンスからアクセスできる
@foreach ($items as $item)
<tr>
<td>{{ $item->getId() }}</td> //拡張したモデルクラスのメソッドを呼び出す
</tr>
@endforeach
モデルの検索結果は、配列ではなく、各レコードの「インスタンス」
Person::all();などして帰ってくる値は、
連想配列ではなく、検索結果の各レコードのインスタンス。
Personという単数型のクラスなのはこの点で合致がいく。
各レコードがインスタンスなので、上記の例で行けば、
インスタンス->getId()とすれば該当のインスタンスのIDがゲットできる。
関連記事
https://readouble.com/laravel/8.x/ja/eloquent.html
https://qiita.com/shosho/items/5ca6bdb880b130260586
ORMとは
Object-Relational-Mappingの略で、
データベースのレコードをプログラミング言語のオブジェクトとして扱えるようにするための仕組みのことだ。
https://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E9%96%A2%E4%BF%82%E3%83%9E%E3%83%83%E3%83%94%E3%83%B3%E3%82%B0