2015-01-09 19 views
0

在Laravel 5应用程序中,我有一个“用户”模型和一个“权限”模型,它们都有相应的表格,它们具有多对多的关系。还有一个数据透视表:“permission_user”。Laravel 5 - 访问多对多数据时出错

用户模型包含下面的方法:

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

而且权限模型包含以下方法:

​​

我一直访问用户权限自定义中间件与下面的代码,它一直在出色地工作直到今天。

$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源之前执行的最后的) 。在发生这件事的时候,我确实用Composer更新了Laravel,但认为Laravel资源中的某些东西不太可能导致问题。任何人都可以看到我可能在这里做错了什么,以及我如何解决它?

回答

1

请稍等,我认为这实际上可能只是Laravel 5的一个当前错误(它仍然在技术上处于alpha阶段,因此预计会发生突变)。

泰勒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而该网址的最后部分与所有疯狂的字母和数字是你需要的版本。 – John

+0

@timmyc嗨,哥们,今天看起来像是修好了。您现在应该能够将作曲家恢复到原来的样子。 – John