Order by Pivot Fields

When working with belongsToMany and pivot tables, you can create extra columns in the pivot table. Then, use wherePivot() and orderByPivot() to create a separate relationship function in the Model, already filtered/ordered the way you need.

app/Models/User.php:

public function roles(): BelongsToMany
{
return $this->belongsToMany(Role::class)
->withPivot('active')
->withTimestamps();
}
 
public function latestActiveRoles(): BelongsToMany
{
return $this->roles()
->wherePivot('active', 1)
->orderByPivot('created_at', 'desc');
}

Some Controller:

$users = User::with('latestActiveRoles')->get();

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