When you work on an app that requires a many-to-many relationship between tables, you often need a pivot table in your database to manage the associations between records. Let’s consider a simple database schema as an example:
- Table: posts (Columns: id, body)
- Table: categories (Columns: id, name)
Suppose you need to link each post with one or multiple categories. In this scenario, you require a third table to centralize and track which categories are associated with each post. This intermediary table is commonly referred to as a “pivot table” in relational databases. It helps aggregate and present data in a more structured way.
In Laravel’s Eloquent ORM, a pivot table is used to establish a many-to-many relationship between two models, such as the Post model and the Category model. Here’s how we describe the relationship in our models:
Post Model:
class Post extends Model { use HasFactory; protected $fillable = [ 'body', ]; public function categories() { return $this->belongsToMany(Tag::class); } }
Category Model:
class Category extends Model { use HasFactory; protected $fillable = ['name']; public function posts() { return $this->belongsToMany(Post::class); } }
Pivot Table Model:
class PostCategory extends Model { protected $table = 'post_category'; use HasFactory; }
Once you have the appropriate migration files for posts, categories, and the pivot table (post_category), you can start using the pivot table to manage many-to-many relationships.
For example, when you add a new post with associated categories, you can use the categories() method on the Post model to retrieve a BelongsToMany relationship collection of categories.
In your Blade template, you can loop through the posts and display their categories:
@foreach ($posts as $post) <article> <div class="entry-text mb-5"> {!! $post->body !!} </div> @foreach ($post->categories as $category) <span>{{ $category->name }}</span> @endforeach </article> @endforeach
By following this approach, you can efficiently manage many-to-many relationships using pivot tables in Laravel.
Hope the article is clean and helpful.