Таблица запросов от модели или контроллера в Laravel

У меня есть стол role_user который имеет две колонки user_id а также role_id, user_id это идентификатор пользователя от users стол и role_id это идентификатор от roles Таблица.

Я хочу запросить role_user и показать имя роли рядом с каждым пользователем. пример

Таблица users

user_id username ...
1      Test user

Таблица roles

role_id  role_name
1       Admin

Таблица role_user

user_id   role_id
1          1

Я хочу показать на странице

Test user - Admin

Я добавил это в моем Users модель

public function role()
{
return $this->hasOne('App\Role', 'user_id', 'role_id');
}

а это в контроллере

public function users()
{
$userRole = User::find(1)->role;

return View::make('users', [
'userRole' => $userRole
]);
}

В настоящее время у меня есть это, что очевидно, почему:

SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестный столбец ‘role.user_id’ в ‘предложении where’ (SQL: select * from roles где roles,user_id является нулевым и roles,user_id не является нулевым пределом 1)

Вопрос в том, как сделать запрос role_user таблица из контроллера или из модели и при отображении пользователей для отображения имени роли тоже.

-1

Решение

Вы определили свою таблицу так, чтобы один пользователь мог иметь много ролей (используя сводную role_user Таблица.

Если у пользователя может быть только одна роль, вы можете удалить таблицу role_user и добавить столбец. role_id к вашей таблице пользователей.

Используя ваше текущее изменение реализации role отношение в модели пользователя к следующему.

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

В вашем контроллере

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

return View::make('users', [
'users' => $users
]);
}

Чтобы просто показать названия ролей используйте implode метод возврата коллекции

@foreach ($users as $user)
{{ $user->roles->implode('name', ',') }}
@endforeach
1

Другие решения

Вы используете сводную таблицу для поддержания отношений, поэтому вам нужно
belongsToManyОтношение и определение пользовательского метода доступа для него, например, так:

//User model file
public function roles()
{
return $this->belongsToMany(App\Role::class);
}

public function getRoleAttribute()
{
return $this->roles()->first();
}
-1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector