Отношения один ко многим в Laravel

Я создаю приложение на Laravel, в котором у пользователей есть роль.

Я установил модель пользователя с return $this->belongs_to('Role') и модель ролей с return $this->has_many('User'), а таблица базы данных пользователей имеет столбец role_id.

Мой вопрос касается чтения, а также обновления роли через модель пользователя. Приведенный ниже код - это то, что я пытался, но пока не повезло:

Контроллер

return View::make('admin.users.index')->with('users', User::paginate(50));
// Also tried User::with('role')->paginate(50) which doesn't help

Вид

@foreach($users->results as $user)

    {{ $user->role->role }} // Trying to get property of non-object
    {{ $user->role()->role }} // Undefined property

    {{ var_dump($user->role) }}

    // Outputs
    object(Role)#39 (5) {
        ["attributes"]=>
            array(4) {
                ["id"]=> string(1) "2"
                ["role"]=> string(4) "User"
                ["created_at"]=> string(19) "0000-00-00 00:00:00"
                ["updated_at"]=> string(19) "0000-00-00 00:00:00"
            }
        ["original"]=>
            array(4) {
                ["id"]=> string(1) "2"
                ["role"]=> string(4) "User"
                ["created_at"]=> string(19) "0000-00-00 00:00:00"
                ["updated_at"]=> string(19) "0000-00-00 00:00:00"
            }
        ["relationships"]=>
            array(0) {
            }
        ["exists"]=> bool(true)
        ["includes"]=>
            array(0) {
            }
    }

@endforeach

И с обновлением похожая история - $user->role = Input::get('role') тоже не работает.

Я явно что-то упускаю, может ли кто-нибудь показать мне, как это сделать правильно?


person PaulK    schedule 21.03.2013    source источник


Ответы (2)


Проверьте это: http://vespakoen.github.com/authority-laravel/

Это пакет ACL Authority для laravel. Там у пользователя может быть от 1 до n ролей, поэтому он использует this->has_many_and_belongs_to.

person JPOV    schedule 22.03.2013
comment
Спасибо за совет, но я специально ищу, как работать с отношениями "один ко многим", а не с отношениями "многие ко многим". - person PaulK; 25.03.2013

Как видите, роль возвращает массив, поэтому обращаться к нему нужно как к массиву

правильный способ получить к нему доступ был бы

$ user-> role [0] -> id

person adib.mosharrof    schedule 28.04.2013