Laravel 5.2调用未定义的方法,即使方法存在
我在Laravel 5.2调用未定义的方法,即使方法存在,laravel,Laravel,我在用户和权限模型之间有多对多关系 用户模型 public function permissions() { return $this->belongsToMany(Permission::class); } public function tambahPermission($permission){ if(is_string($permission)){ $permission = Permiss
用户
和权限
模型之间有多对多关系
用户模型
public function permissions()
{
return $this->belongsToMany(Permission::class);
}
public function tambahPermission($permission){
if(is_string($permission)){
$permission = Permission::where('name', $permission)->first();
}
return $this->permissions()->attach($permission);
}
并成功运行该播种机
$userAdmin = App\Models\User::create([
'full_name' => 'Admin Full Name',
'address' => 'JL. Kalij',
'phone' => 0857,
'family_name' => 'Rizky Family Admin',
'family_address' => 'JL. Kandangan',
'family_phone' => 085799996666,
'password' => bcrypt('123456789'),
'email' => 'admin@domain.co.id',
'status' => 'confirmed',
'balance' => 0,
]);
$userAdmin->tambahPermission('index.post');
然后我尝试通过tinker为特定用户添加其他权限,如下所示
$user = App\Models\User::find(3); $user->tambahPermission('create.post');
但是我得到了这个错误
BadMethodCallException with message 'Call to undefined method Illuminate\Database\Query\Builder::tambahPermission()'
已更新
我在我的小炉子里运行这个
>>> $user = App\Models\User::find(3);
=> App\Models\User {#750
id: "3",
email: "admin@kika.co.id",
full_name: "Admin Full Name",
address: "JL. Kalijudan 226 D",
phone: "0",
family_name: "Rizky Family Admin",
family_address: "JL. Kandangan",
family_phone: "0",
idcard: null,
status: "confirmed",
balance: "0",
created_at: "2016-10-25 10:34:40",
updated_at: "2016-10-25 10:34:40",
}
>>> $user->tambahPermission('create.post');
BadMethodCallException with message 'Call to undefined method Illuminate\Database\Query\Builder::tambahPermission()'
tambahPermission()
方法存在于用户模型中
我的代码怎么了?
为什么它能在播种机上成功运行而不能在修补机上运行
我想要的是为特定用户添加额外权限
感谢您的帮助。find()返回集合而不是模型,其中as create()返回模型实例
当您检查创建功能时:
public static function create(array $attributes = [])
{
$model = new static($attributes);
$model->save();
return $model;
}
函数在保存数据后返回实例,其中作为find()返回集合…Try:
$user=App\Models\user::find(3)$用户->加载(“权限”)$用户->权限('create.post')代码>否。仍然失败运行$user=App\Models\user::find(3)$用户->权限('create.post')代码>全部在一行中?如果是,您能将其分成两行并在调用自定义方法之前先执行查询吗?@ArminSamsame@RimonKhan在保存关系的函数上使用范围前缀没有意义。应该使用作用域来修改/过滤生成的一组对象。那么,如果我想为特定用户添加权限,我们就假设我想更新特定用户的权限,该怎么办?通常我使用Model::find()。。以此类推$var->save()to update.find()不返回集合如果给定单个id,它将返回模型。