9
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Eloquentって何ってなったからまとめてみた

Last updated at Posted at 2021-06-07

Eloquentとは

Eloquent ORMとはLaravelで実装されているデーターベース操作のための機能。
すべてのEloquentモデルは Illumination\Database\Eloquent\Modelを継承する。

そもそもORMとは

ORM・・・Object-relational mapping

オブジェクト関係マッピング(英: Object-relational mapping、O/RM、ORM)とは、データベースとオブジェクト指向プログラミング言語の間の非互換なデータを変換するプログラミング技法である。 オブジェクト関連マッピングとも呼ぶ。

Wikipediaより

  • オブジェクト指向プログラミングとRDBとの考え方の違いを変換してつないでくれるもの。

    • 考え方の違いを「インピーダンス・ミスマッチ」  という
  • 本来RDBからの値はオブジェクト指向プログラミングとは互換性がないがそれを変換して使いやすくしてくれることになる。

とりあえず自分がわかる範囲でまとめました…。

Laravelにおけるデータベース操作

①Eloquent ORM
②クエリビルダ

Eloquentを使用するにはuseするモデル名を宣言する必要がある。
クエリビルダを使用する場合には加えてDBファザードをuse宣言する必要がある。

本題

使用するサンプル

Flight.php
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Flight extends Model
{
    //
}

テーブルの定義

Flight.php
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Flight extends Model
{
    /**
     * モデルと関連しているテーブル
     *
     * @var string
     */
    protected $table = 'my_flights';
}

主キー

  • 主キーはidカラムであると想定している。

これをオーバーライドするにはprotectedのprimaryKeyプロパティを定義する。

タイムスタンプ

  • データベース上にあるcreated_atカラムとupdated_atカラムを自動的に更新する。

  • 自動的に更新してほしくない場合は$timestampsfalseにする。

  • タイムスタンプのフォーマットをカスタマイズするなら$dataFormatプロパティを設定する。

  • タイムスタンプを保存するカラム名をカスタマイズする必要があるなら、モデルにCREATED_ATUPDATED_AT定数を設定する。

データベース接続

デフォルトでは.envに定義されているデータベースに接続されるが、それと異なる接続をしたいときは$connectionプロパティを使用する。

デフォルト属性値

あるモデルの属性にデフォルト値を指定したい場合は、$attributesプロバティを定義する。

モデルの取得

各Eloquentモデルは対応するデータベースへ接続できたときクエリビルダとして使用できる。

コレクション

複数の結果を取得するallgetIlluminate\Database\Eloquent\Collectionインスタンスを返す。

多次元配列で返されるため、アロー演算子ではプロパティの取得ができない。

単レコードの取得

  • 単一レコードで取得した場合はModelオブジェクトで値を返す。

  • アロー演算子で中身のプロパティの取得ができる。

主キーで指定したモデル取得:find

$flight = App\Flight::find(1);

クエリ条件にマッチした最初のモデル取得:first

$flight = App\Flight::where('active', 1)->first();

クエリ条件にマッチした最初のモデル取得の短縮記法:firstWhere

$flight = App\Flight::firstWhere('active', 1);

fillableguardedの違い

両方とも入力値を反映したくないときに使う。
fillble →  指定したカラムのみ値が入力される。
guarded → 指定したカラムには値が入力されない。

おわりに

だいぶ駆け足でまとめたのでだいぶ中身が薄っぺらくなってしまいましたが、いままで何となく使っていたものが
ここまで奥深いとは思いませんでした。(正直何も疑問に思わずに手を動かしていた)
これをきっかけにまた詳しく学んでいきたいと感じました!

参考

9
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?