(Laravel) DB【Eloquentの基本的な使い方】

laravel-eloquent

 

Laravelについてのメモ書き、
とくにEloquentについて

 

Eloquentとは

Laravelに内蔵されている、ORMの機能。

 

ORMとは

Object-Relational-Mappingの略。

データベースのレコードを、
プログラミング言語のオブジェクトとして扱えるようにするための仕組み。

 

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がゲットできる。

 

記事が気に入った方はシェアをお願いします!

コメントを残す

メールアドレスが公開されることはありません。