Laravelの多対多のリレーションでテーブル名を規則から外す時

アプリケーション

多対多のリレーションを設計するときに、ドキュメント通りやっていたと思ったらちょっとした勘違いをした話です。

ここに3つのテーブルがあるじゃろ?

今回のテーブル

  • events
  • event_tags
  • event_tag_event←pivotテーブル

通常のテーブルは

  • events
  • tags
  • tag_event

って感じでデフォルトの規則通りリレーションを貼ればいいのですが、ちょっと癖のある名前にすると少し気をつけるところがあるようです。

ドキュメントを見てみる

Laravel 5.1 Eloquent:リレーション

ほうほう第2引数をもたせてあげればいいんだなー

public function eventTags()
{
  // 第2引数はPivotテーブル!
  return $this->belongstoMany('App\Modles\EventTag', 'event_tag_event)->withTimestamps();
}
public function events()
{
  return $this->belongsToMany('App\Models\Events');
}

tinkerを立ち上げて確認すると・・

SQLSTATE[42000]: Syntax error or access violation: 1066 Not unique table/alias on relationship

 
怒られます。ヽ(´ー`)ノ

第2引数はPivotテーブル名!

もしかしてPivotテーブル名を指定するのでは・・?

SQLSTATE[42000]: Syntax error or access violation: 1066 Not unique table/alias on relationship

public function eventTags()
{
  // 第二引数はPivotテーブル!
  return $this->belongstoMany('App\Modles\EventTag', 'event_tag_event)->withTimestamps();
}
public function events()
{
  return $this->belongsToMany('App\Models\Events');
}

怒られませんでした。ヽ(´ー`)ノ

所感

最近はバッグエンドよりもフロントエンドが気になって夜も寝れませんヽ(´ー`)ノ


関連書籍