観光名所 ER図と各モデル

リレーションのサンプルとして。観光名所テーブル、都道府県テーブル、東日本か西日本かの地域テーブルの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)の処理を書いて、しかも「従テーブルの…」は、頭がこんがらがります。でも、これで合っている。(きっと)

コメント