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