2015-01-09 5 views
0

В приложении Laravel 5 у меня есть модель «Пользователь» и модель «Разрешение», как с соответствующими таблицами, которые имеют отношение «многие ко многим». Существует также сводная таблица: «permission_user».Laravel 5 - Ошибка при доступе к данным «многие ко многим»

Модель пользователя содержит следующий метод:

public function permissions() 
{ 
    return $this->belongsToMany('App\Permission'); 
} 

И модель Разрешения содержит следующий метод:

public function users() 
{ 
    return $this->belongsToMany('App\User'); 
} 

Я доступ права доступа пользователей в пользовательском промежуточном слое с помощью следующего кода, и он отлично работает до сегодняшнего дня.

$permissions = \Auth::user()->permissions()->get(); 

Вскользь это ломается. Я получаю следующую ошибку:

ErrorException in BelongsToMany.php line 177: Argument 1 passed to Illuminate\Database\Eloquent\Relations\BelongsToMany::hydratePivotRelation() must be of the type array, object given, called in /Server/sites/app/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/BelongsToMany.php on line 158 and defined

Действительно не уверен, что здесь происходит. В попытке более внимательно следить за документы, я попытался это:

foreach (\Auth::user()->permissions as $permission) 
{ 
    // do something with $permission 
} 

Но я получаю то же самое (трассировка стека показывает, что линии, показанные здесь, являются последними, выполненные перед заголовком в источник Laravel) , Я обновил Laravel с Composer примерно в то время, когда это произошло, но подумал, что вряд ли что-то из источника Laravel вызвало проблему. Может ли кто-нибудь увидеть, что я могу делать неправильно здесь, и как я могу это исправить?

ответ

1

Сядьте плотно, я считаю, что это может быть всего лишь текущая ошибка с Laravel 5 (которая по-прежнему технически находится в альфа, поэтому можно ожидать отладочных изменений).

Тейлор Otwell (создатель Laravel) написал об этом раньше:

https://twitter.com/taylorotwell/status/553262692426059776

Однако, это выглядит как несколько частей Laravel 5 ядра все еще должны быть обновлены, чтобы быть совместимым с этим изменением.

Если вам нужно приложение для работы прямо сейчас, просто изменить в файле composer.json:

"Laravel/рамочный": "~ 5,0",

к этому:

«laravel/framework»: «dev-master # 9b108d85ce19300dfdd479fa4e05d9ea6e4e3abc»,

А затем запустите обновление композитора. Это приведет к появлению вчерашней версии Laravel 5, которая работала.

Не забудьте изменить его назад, хотя как только это исправлено!

+0

Ах, да, исправлено с предыдущей версией. Большое спасибо за вашу помощь. Я видел, что на этой неделе L5 нацелился на бета-версию, поэтому не ожидал, что это будет проблемой. Когда происходят нарушения, как мне найти старые имена версий, как вы делали, чтобы дать композитору? – timmyc

+0

@timmyc Нет проблем! Чтобы найти имя версии, просто перейдите сюда: https://github.com/laravel/framework/commits/master и найдите фиксацию, которая работает для вас. Затем нажмите на эту фиксацию, и она приведет вас к URL-адресу, подобному этому: https://github.com/laravel/framework/commit/9b108d85ce19300dfdd479fa4e05d9ea6e4e3abc И последняя часть этого URL-адреса со всеми сумасшедшими буквами и номером - это нужная вам версия , – John

+0

@timmyc Эй, приятель, похоже, что это было исправлено сегодня. Теперь вы должны вернуть своего композитора обратно, как это было. – John

Смежные вопросы