リレーション時、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’)