Laravel7 リレーション関数のパラメータ

リレーション時、laravel命名規則通りにデータベースのカラムを作成していれば、第1パラメータしか指定する必要はないが、そうでない場合は、第2パラメータ以降でカラム名を指定してやる必要がある。
しかし、毎回第2パラメータ以降の指定するカラムが分からなくなるのでメモ。

■hasMany()のパラメータ

■テーブル構成

members
・id

articles
・id
・member_id

Memberモデル

$this->hasMany(Article::class, 'member_id', 'id');

第1パラメータ:リレーション先のモデル
第2パラメータ:外部キー(リレーション先テーブル(articles)の’member_id’)
第3パラメータ:親テーブル(members)の’id’)

■belongsTo()のパラメータ

■テーブル構成

members
・id

follows
・id
・member_id

Followモデル

$this->belongsTo(Member::class, 'member_id', 'id');

第1パラメータ:リレーション先のモデル
第2パラメータ:外部キー(自テーブル(follows)の’member_id’)
第3パラメータ:親テーブル(members)の’id’)
※第2パラメータと第3パラメータがhasMany()と逆のように感じるので注意!!

■belongsToMany()のパラメータ

■テーブル構成

articles
・id

article_areas(中間テーブル)
・id
・article_id
・area_id

areas
・id

Articleモデル

$this->belongsToMany(Area::class, 'article_areas','article_id', 'area_id');

第1パラメータ:リレーション先のモデル
第2パラメータ:中間テーブル名
第3パラメータ:中間テーブルの親テーブルキー(article_areasの’article_id’)
第4パラメータ:結合するテーブルのキー(article_areasの’area_id’)

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です