Laravel 5.2 调用未定义的方法甚至存在方法

标签 laravel

UserPermission 模型之间存在多对多关系

用户模型

    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/

相关文章:

php - 我如何在 Laravel 中显示分组值

javascript - 从 ajax 调用返回 html 并格式化它

php - Laravel: View 和 Controller 位于同一目录中

php - Laravel:用 eloquent 获取最常用的单词

php - apns 在设备离线时丢弃了旧的推送通知

php - 如果数据库记录中包含空值,如何将空值设置为数据字段?

javascript - Laravel 未定义

php - Laravel 5 - 干净的代码,在哪里保存业务逻辑( Controller 示例)

php - 带有 join 的 Sum 函数给出总和乘以 laravel ORM 中条目的次数与 mysql

php - 我无法访问 Laravel routes/api.php 文件的任何路由