Получение всех значений из связанной таблицы (многие-ко-многим)
Есть три таблицы: 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. Почему я получаю эту ошибку и как получить все значения для связанной таблицы?
Ответы (2 шт):
Переменная $users уже хранит коллекции модели User. Ошибка возникает из-за попытки получить свойство roles у всей коллекции roles. В данном примере, получить все роли для каждого пользователя можно так:
foreach ($users as $user) {
foreach ($user->roles as $role) {
dump($role->slug)
}
}
$users = User::with('roles')->get();
foreach($users as $user){
dump($user->roles);
}
$user возвращают array для того там нету roles