見出し画像

Laravel 学習記録 #005 Eloquentを学ぶ

LaravelのEloquentとコレクションの概要について学習したものをまとめてます。

Eloquentとは?

  • データベースアクセスの機能

  • ORMの機能(言語のオブジェクトとそれとは非互換性のデータをマッピングする技術 PHP⇆SQLによるデータ、レコード)

  • モデルクラスを作成して使う(1つのモデルクラス、1つのデータベーステーブルと対応)

  • モデルクラスに用意されたメソッドで操作する

つまりはModelを介してデータベースとやりとりしているイメージですかね。


Eloquentを使うためのモデルのお決まり

クラスApp名前空間に配置(appフォルダで作成)
Modelクラスを継承
クラス名は単数系
→クラス名と異なる名前も付けられるが、その場合は以下のように設定する

protected $table ="テーブル名"


プライマリーキーはidプロパティ
モデルクラスはテーブルに設定されているプライマリーキーが「id」という名前の整数のフィールドであるという前提で機能する
→id以外の名前のフィールドをプライマリーキーとして指定するには以下のようにする

protected $primaryKey ="フィールド名"

プライマリーキーはint型
自動インクリメント(int型)設定されたものである必要がある
自動インクリメントされていない場合は以下のようにする

protected $incrementing = false;

型が違う場合は

protected $keyType = "型名";

created_at、updated_atは自動設定
モデルにはモデルの作成と更新に関するフィールドを用意できる
datetime型のフィールドとして用意される
Eloquentが値を自動で用意してくれる
自動設定したくない時は以下のようにする

protected $timestamps = false;

created_at、updated_at以外の名前にしたい時は

const CREATED_AT = "作成日時フィールド名";
const UPDATED_AT = "更新日時フィールド名";


コレクション

  • Modelで取得されたレコード1つひとつが、対応するモデルクラスのインスタンスとして保管され、Collection(コレクション)と呼ばれる
    →レコードに含まれる1つひとつの値が全てプロパティとして保管され、このインスタンスから必要な値を取り出して利用できる

  • foreachなどでレコード処理することができる(イテレータ)

コレクションの機能

コレクションにはいろいろな機能があります。
下記はその一部です。

// データを取得するクロージャの関数は戻り値があり、trueなら受け入れる
Collection->filter(function(引数){...});

// 差分のみを抽出
Collection->diff(Collection2);

// 配列にまとめてあるIDのモデルだけ取得
Collection->only(配列);

// 2つのコレクションを1つにまとめる(同じidのモデルは上書き。つまりはユニーク)
Collection->merge(Collection2);


// ユニークなコレクションを返す(重複するモデルを取り除く)
Collection->unique();

// コレクションをもとにコレクションを作成(array_mapのコレクション版)
Collection->map(function($item, $key){...});

// 指定したコレクションが値がコレクション内に存在するかを確認
Collection->contains('$value1', '$value2');

// コレクションが空かどうか確認
Collection->isEmpty();

こんな感じでコレクション操作に役立つメソッドがたくさんあるとのこと
必要に応じて調べて使うとよさそうですね。


この記事が気に入ったらサポートをしてみませんか?