@yelleo

Как получить все значения из связанной таблицы (многие-ко-многим)?

Есть три таблицы: users (с полями id и login), roles(с полями id, name и slug) и третья для связи role_user (с полями role_id и user_id). Как получить все значения из связанной таблицы?

В файле модели User прописана связь:

public function roles()
{
  return $this->belongsToMany(Role::class, 'role_user', 'user_id', 'role_id');
}

В файле модели Role прописана связь:

public function users()
{
    return $this->belongsToMany(User::class, 'role_user', 'role_id', 'user_id');
}

В файле UserController пытаюсь получить значения:

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

dump($users->roles);

В итоге получаю ошибку:
Property [roles] does not exist on this collection instance.

p.s. Получение по id значения через find(id) работает. Пробовал получить значения через $user->pivot, но в результате та же ошибка, только для pivot. Аналогичная ошибка в RoleController. Почему я получаю эту ошибку и как получить все значения для связанной таблицы?
  • Вопрос задан
  • 99 просмотров
Решения вопроса 1
delphinpro
@delphinpro Куратор тега Laravel
frontend developer
$users – это коллекция, а не один пользователь.

//Текущий

dump(Auth::user()->roles);

//Любой другой

dump(User::find(1)->roles);

// в вашем случае
$users = User::with('roles')->get();
foreach ($users as $user) {
  dump($user->roles);
}


UPD
При правильном именовании таблиц и полей, три параметра лишние
//return $this->belongsToMany(User::class, 'role_user', 'role_id', 'user_id');
return $this->belongsToMany(User::class);

Лучше придерживаться этого соглашения, чтобы вся магия работала.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы