2015-07-21 36 views
13

我一直在试图创建一个简单的用户管理系统,但在查询关系时不断地碰到路障。例如,我有用户角色并且每当我尝试对所有用户及其角色进行查询时,都会收到错误消息。标题中的只是我遇到的最新的一个。Laravel 5与关系查询导致“调用成员函数addEagerConstraints()null”错误

我的用户和角色模型是这样的:

class Role extends Model 
{ 
    public function users() 
    { 
     $this->belongsToMany('\App\User', 'fk_role_user', 'role_id', 'user_id'); 
    } 
} 

class User extends Model 
{ 
    public function roles() 
    { 
     $this->belongsToMany('\App\Role', 'fk_user_role', 'user_id', 'role_id'); 
    } 
} 

我的迁移表许多一对多两个看起来像这样的关系:

public function up() 
    { 
     Schema::create('role_user', function (Blueprint $table) { 
      $table->increments('id'); 
      $table->integer('user_id')->unsigned()->nullable(); //fk => users 
      $table->integer('role_id')->unsigned()->nullable(); //fk => roles 

      $table->foreign('fk_user_role')->references('id')->on('users')->onDelete('cascade'); 
      $table->foreign('fk_role_user')->references('id')->on('roles')->onDelete('cascade'); 
     }); 
    } 

然后我尝试在控制器中获得与它们的关系的所有记录:

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

    return $users; 
} 

所以我需要另一双眼睛告诉我我在这里失踪了什么?

回答

39

您在定义关系的方法中缺少返回声明。他们需要返回关系定义。

更换

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

随着

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

也为其他任何人,我需要解决从“fk_user_role”到“ROLE_USER”第二个参数相同的问题阅读本。 – Tomkarho

+1

我现在要自杀:P小时浪费,至少现在我永远不会忘记 – Jorn

+0

与我一样的问题,花几个小时解决愚蠢的错误谢谢你 –

相关问题