1
0

More than 1 year has passed since last update.

[Laravel]同一モデル間での複数リレーション

Posted at

[Laravel]同一モデル間での複数リレーション

何をするか

既にリレーションが出来ているモデル間にもう一つリレーションを足したい

今回のシチュエーション

users
id
name
comments
id
user_id
mention_user_id

仕事のコード使えないので、まあこんな感じで雑いですけどテーブルがあったとします。ここでcommentsテーブルは、user_idのユーザーによってmention_user_idのユーザーにメンションされたコメントとします。
commentsテーブルのuser_idカラムはもちろんusersテーブルのidカラムと紐付いています。
ここでmention_user_idからもusersテーブルのidカラムとリレーションを紐付けてnameカラムとかを引っ張ってきたいのです。

方法

結論としては以下です。

// Userモデル
public function MentionUserComments()
{
  return $this->hasMany(Comment::class, 'mention_user_id');
}
// Commentモデル
public function MentionUserComments()
{
  return $this->belongsTo(User::class, 'mention_user_id');
}

という感じで第二引数に外部キーを指定します。
本来第二引数を指定しない場合はlaravel様がメソッド名を確認して自動でやってくれてる規約をオーバーライドしてる場合と同じですね。
という感じで意外と同一モデル間でもリレーションは複数つなげるみたいです。

最後に

一つのモデルでリレーション取ってる記事とかはあったのですが、2つのモデル感で複数リレーション取ってる記事はなかったのでホンマに出来るんかいなと思いながら試行錯誤したので備忘録とします。
同じ壁にぶち当たった悩めるエンジニアの一助になれば幸いです。

1
0
0

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
1
0