2016-05-06 7 views
0

私は、Eloquentを使用してユーザーが多くの役割を持つことができるLaravel 4を使用するUser-Rolesモデルを持っています。私は簡単にこのコードを使用して、ユーザーにリンクされているすべてのロールにアクセスすることができます。Laravel Eloquentを使用して多数の多次元関係にある非リンクモデルのリストを取得する

class User extends Model { 
    protected $table = 'user'; 
    protected $fillable = array('name'); 

    public function rolesLinked() { 
     return $this->hasMany('App\UserRoleLink', 'user_id'); 
    } 
} 

私は選択ボックスに特定のユーザーのページに表示する、ユーザーにリンクされていない役割を取得しようとしてきました。 Userクラスに含まれるこの関数を使用します。

public function rolesNotLinked() { 
    $user = this 
    $roles = Roles::whereDoesntHave('App\UserRoleLink',function($query) use ($user){ 
     $query->where('user_id',$user->id); 
    }); 
} 

この関数を呼び出すと、次のエラーが発生するという問題があります。機能は問題があった場合< 1を参照すると、私が使用して試した

Call to undefined method Illuminate\Database\Query\Builder::App\UserRoleLink() 

はありますが、after reading thisとオンラインのソースコードは、関数呼び出しはかなり私が試したものを行います。

私の関数呼び出しで何か間違っているのですか、どこかで構成が乱れていますか?参考のため

は、ここに私の他のモデルのクラスは次のとおりです。

class UserRoleLink extends Model{ 
    protected $table = 'user_role_link'; 
    protected $fillable = array('role_id','user_id); 

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

class Role extends Model{ 
    protected $table = 'role'; 
    protected $fillable = array('name'); 
} 

編集:私は、貼り付けコピーしたときに、私はfillablesによって台無しことが判明しました。それは問題を解決しませんでしたが、それは一歩近づいたと思います。

答えて

0

whereDoesntHaveメソッドを使用するには、関係をロールモデルに追加する必要があります。

class Role extends Model{ 
    protected $table = 'role'; 
    protected $fillable = array('name'); 

    public function UserRoles() { 
     return $this->hasMany('App\UserRoleLink', 'id'); 
    } 
} 


また、whereDoesntHave方法最初のパラメータはthteモデルが、関係の関数ではない。

public function rolesNotLinked() { 
    $user = this 
    $roles = Roles::whereDoesntHave('UserRoles',function($query) use ($user){ 
     $query->where('user_id',$user->id); 
    }); 
} 
関連する問題