Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

FireBlade's avatar

Pivot Table Naming Convention Clash

I have this actual table structure:

users
    id - integer
    name - string
 
roles
    id - integer
    name - string
 
role_user
    user_id - integer
    role_id - integer

However my index template

$roles = RoleUser::join('roles','role_user.role_id','=','roles.id')

is looking for

role_users

0 likes
4 replies
FireBlade's avatar

Am a little confused...so I need the table but not the model...?How do I then pull all users with their roles if I use the roles dynamic relationship property:

use App\Models\User;
 
$user = User::find(1);
 
foreach ($user->roles as $role) {
    //
}

This code only returns one user ?

automica's avatar
automica
Best Answer
Level 54

@FireBlade

This code only returns one user ?

it will do, as you are only getting a single user:

$user = User::find(1);

if you want all users

use App\Models\User;

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

foreach ($users as $user) {
    foreach ($user->roles as $role) {
        //
    }
}
1 like
FireBlade's avatar

@automica This is not correct

$users = User::with('roles')->all();

Error: Call to undefined method Illuminate\Database\Eloquent\Builder::all().

Replace with

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

Please or to participate in this conversation.