Belongs to Many Pivot table naming

To determine the table name of the relationship's intermediate table, Eloquent will join the two related model names in alphabetical order.

This would mean a join between Post and Tag could be added like this:

class Post extends Model
{
public $table = 'posts';
 
public function tags()
{
return $this->belongsToMany(Tag::class);
}
}

However, you are free to override this convention, and you would need to specify the join table in the second argument.

class Post extends Model
{
public $table = 'posts';
 
public function tags()
{
return $this->belongsToMany(Tag::class, 'posts_tags');
}
}

If you wish to be explicit about the primary keys you can also supply these as third and fourth arguments.

class Post extends Model
{
public $table = 'posts';
 
public function tags()
{
return $this->belongsToMany(Tag::class, 'post_tag', 'post_id', 'tag_id');
}
}

Tip given by @iammikek

Like our articles?

Become a Premium Member for $129/year or $29/month
What else you will get:
  • 59 courses (1057 lessons, total 42 h 44 min)
  • 79 long-form tutorials (one new every week)
  • access to project repositories
  • access to private Discord

Recent Premium Tutorials