PHP
Manage Pivot Table Data in Eloquent Many-to-Many Relationships
Learn how to define and interact with additional columns (pivot data) on your intermediate table in Laravel Eloquent's many-to-many relationships.
// In App\Models\User.php
class User extends Model
{
public function roles()
{
return $this->belongsToMany(Role::class)->withPivot('status', 'assigned_at');
}
}
// Attaching with pivot data
$user = App\Models\User::find(1);
$user->roles()->attach(3, ['status' => 'active', 'assigned_at' => now()]);
// Accessing pivot data
foreach ($user->roles as $role) {
echo $role->name . ' - Status: ' . $role->pivot->status . ' - Assigned: ' . $role->pivot->assigned_at;
}
// Updating pivot data
$user->roles()->updateExistingPivot(3, ['status' => 'inactive']);
How it works: When you have extra columns on your intermediate (pivot) table in a many-to-many relationship, Eloquent allows you to interact with them. By adding `withPivot()` to your `belongsToMany` definition, you tell Eloquent to load these columns. You can then `attach()` or `sync()` records with additional data, and access the pivot attributes via the `pivot` property on the related model. `updateExistingPivot()` allows you to modify pivot data for an existing relationship.