【Laravel】EloquentORM リレーションの基礎
こんにちは。今回はEloquentORMを使う上で欠かすことの出来ないリレーションについて解説していきます。
リレーションとは
リレーションとは関連するモデルを取得するための機能です。簡単なサンプルを元に説明します。
ブログ記事を表現するモデルPostがあるとします。
id | title(記事の表題) | content(記事の本文) | user_id |
1 | Eloquentの使い方 | EloquentはLaravelに搭載されている ORMです。〜 | 1 |
著者を表すUsersテーブルがあるとします。
id | name |
1 | joe |
2 | bob |
PostsとUsersテーブルは関係しており、Postsのuser_idとUsersのidで関連付けることができます。
このような場合、それぞれのテーブルに対応したEloquentモデル作成し、モデル同士を関連付けることによって、関連するテーブルのデータを容易に取得することができます。
Eloquentモデルを作成する
まずはEloquentモデルを作成します。UserとPostモデルをartisan make:modelコマンドで作成しましょう。app/Modelsフォルダにモデルが作成されます。(バージョン7以前はapp配下に作られます。)
php artisan make:model User
php artisan make:model Post
今回はPostをメインのモデルとして取得し著者名を関連するUserモデルから取得したいと思います。Userとのリレーションを張るためにPostモデルを編集します。
Postモデルにuserメソッドを作ります。PostはUserモデルとN対1の関係にあります。著者(User)が複数の記事(Post)を投稿するからです。それによってPostはUserに所属するという関係が成り立ちます。PostがUserに所属するのでPostクラスでbelongsTo(User::class)を実行すると関連するUserが1件取得できます。
use App\Models\User;
/**
* 記事に関連しているユーザーの取得
*/
public function user()
{
return $this->belongsTo(User::class);
}
リレーションが定義できたら実際にPostからUserモデルが取得できるか確認してみましょう。tinkerを使って実行します。Postをfindで1件取得し、先程定義したuserを呼び出します。すると関連するUserモデルが取得できます。
>>> App\Models\Post::find(1)->user;
=> App\Models\User {#4133
id: "1",
name: "joe",
}
まとめ
いかがでしょうか。関連するモデルをリレーションを使用して取得する方法を解説しました。今回紹介したbelongsTo以外にも、様々なリレーションのメソッドが存在します。参考で紹介している公式ドキュメントのページを一読することをオススメします。
参考
Laravel公式:リレーション https://readouble.com/laravel/8.x/ja/eloquent-relationships.html
ディスカッション
コメント一覧
まだ、コメントがありません