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
Enjoyed This Tip?
Get access to all premium tutorials, video and text courses, and exclusive Laravel resources. Join our community of 10,000+ developers.
Recent Courses on Laravel Daily
[NEW] Laravel Boost: Deeper Practical Dive
8 lessons
32 min
Mobile Apps: React Native vs Flutter vs NativePHP?
8 lessons
55 min
Laravel 13 Starter Kit Teams and Customizations
10 lessons
33 min