概要
投稿記事を投稿したユーザーや商品カートの保有ユーザーなど、データが所属しているユーザーを取り出す場合。1対多のリレーションの多に属するデータから1のデータを取得する。
データモデルにリレーションを設定することで、そのデータが属するユーザーを属性として取り出すことができる。
手順
データモデルにuser()メソッドを定義し、そのデータがUserモデルのデータに属していることを記述する。メソッド名はUserの単数形となっていることに注意。
|
1 2 3 4 5 6 7 8 |
class モデル extends Model { .... // リレーション設定 public function user() { return $this->belongsTo('App\User'); } } |
これによってデータモデルにuser属性が追加され、それを介してUserの各属性を取得することができる。
モデルデータ->user->name
例
例えばユーザー認証は設定済みとして、ユーザーの投稿記事モデルPostsを定義済みとする。Postモデルは記事の投稿ユーザーのIDをuser_idとして持ち、外部キー制約を設定している。
|
1 2 3 4 5 6 7 8 9 10 11 12 |
mysql> DESCRIBE posts; +------------+-----------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+-----------------+------+-----+---------+----------------+ | id | bigint unsigned | NO | PRI | NULL | auto_increment | | user_id | bigint unsigned | NO | MUL | NULL | | | comment | varchar(200) | NO | | NULL | | | image_name | varchar(100) | NO | | NULL | | | created_at | datetime | NO | | NULL | | | updated_at | datetime | NO | | NULL | | +------------+-----------------+------+-----+---------+----------------+ 6 rows in set (0.00 sec) |
まずPostモデルにuser()メソッドを定義し、belongsTo(App\User)を戻り値とする。
belongsTo()はPostモデルがUserモデルに属することから、Postのインスタンスが属するUserのインスタンスを返す- このリレーション設定によって、
Postモデルにuserプロパティーが加えられ、Postインスタンスが属するUserのインスタンスを取得できる
|
1 2 3 4 5 6 7 8 |
class Post extends Model { .... // リレーション設定 public function user() { return $this->belongsTo('App\User'); } } |
これでPostインスタンスのuserプロパティーに、その記事を投稿したユーザーへの参照が格納される。
たとえば投稿記事が$postに格納されているとして、ビュー側でユーザーを取得して表示する場合、以下のようなディレクティブになる。
|
1 |
<p>{{ $post->user->name }}さんの記事 : {{ $post->comment }}</p> |