
リレーションのサンプルとして。観光名所テーブル、都道府県テーブル、東日本か西日本かの地域テーブルの3者のリレーション。
それぞれ1対多。

以下は各モデルのコード。
public function prefectures()
{
return $this->hasMany('App\Models\Prefecture');
}
public function famousplaces()
{
return $this->hasMany('App\Models\FamousPlace');
}
public function area()
{
return $this->belongsTo('App\Models\Area');
}
public function prefecture()
{
return $this->belongsTo('App\Models\Prefecture');
}
// 「1対多」の「多」側 → メソッド名は複数形
// 1対 多 の1側は単数形
//従テーブルには「1対1」「1対多」関わらず belongsTo() メソッドを定義。
多分これで合っています。(ちゃんと動いていますから。)
ややこしいのはリレーション先のモデルに自身の処理を書くところ。ここではprefecturesが主テーブル、famous_placesが従テーブル。
モデルFamousPlace(従)の中に、リレーション先の主のメゾット(単数形のprefecture)の処理を書いて、しかも「従テーブルの…」は、頭がこんがらがります。でも、これで合っている。(きっと)
コメント