Eloquentを使用して、ユーザーが多くのロールを持つことができるLaravel 4を使用して、ユーザーロールモデルを持っています。このコードを使用して、ユーザーにリンクされたすべてのロールに簡単にアクセスできます。
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);
});
}
問題は、この関数を呼び出すと次のエラーが発生することです。
Call to undefined method Illuminate\Database\Query\Builder::App\UserRoleLink()
関数に問題があるかどうかを確認するために has < 1 を使用してみましたが、これとオンライン ソース コードを読んだ後、関数呼び出しは私が試したこととほとんど同じです。
関数呼び出しに何か問題がありますか、またはどこかで構成を台無しにしましたか?
参考までに、他のモデル クラスを次に示します。
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 によって台無しになっていることがわかりました。問題は解決しませんでしたが、一歩近づいたと思います。