概要
投稿記事を投稿したユーザーや商品カートの保有ユーザーなど、データが所属しているユーザーを取り出す場合。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> |