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,它将返回模型。