User
和 Permission
模型之间存在多对多关系
用户模型
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()'
已更新
我在我的 tinker 中运行它
>>> $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()
方法存在于用户模型中。
我的代码有什么问题? 为什么它在 seeder 上运行成功,但在 tinker 上运行失败?
我想要的是为特定用户添加额外权限。
感谢任何帮助。
最佳答案
find() 返回集合而不是模型,而 create() 返回模型实例。
检查create函数时:
public static function create(array $attributes = [])
{
$model = new static($attributes);
$model->save();
return $model;
}
函数在保存数据后返回实例,而 find() 返回集合...
关于Laravel 5.2 调用未定义的方法甚至存在方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40236482/