调用未定义的方法Illuminate \ Database \ Query \ Builder :: attachPermissions()

时间:2017-03-27 17:58:01

标签: laravel entrust

我知道这已经是一个过度讨论过的问题了,但我相信我并没有犯下常犯的错误。我在使用Latrvel的Entrust包创建角色和权限时遇到此错误。我正在尝试将权限附加到角色(注意,而不是直接添加到模型)并得到此错误。这是一些代码:

use Illuminate\Database\Seeder;
use App\Role;
use App\Permission;

class RolePermissionSeeder extends Seeder
{
    //assign permissions to roles
    public function run()
    {
        //assign permissions to admin
        $admin =  Role::where('name', 'admin');

        $assignTrainerRole = Permission::where('name', 'assign-trainer-role');
        $removeTrainerRole = Permission::where('name', 'remove-trainer-role');
        $assignTraineeRole = Permission::where('name', 'assign-trainee-role');
        $removeTraineeRole = Permission::where('name', 'remove-trainee-role');
        $attachToTrainer = Permission::where('name', 'attach-to-trainer');
        $detachFromTrainer = Permission::where('name', 'detach-from-trainer');

        $admin->attachPermissions(
            [
                $assignTrainerRole,
                $removeTrainerRole,
                $assignTraineeRole,
                $removeTraineeRole,
                $attachToTrainer,
                $detachFromTrainer,
            ]
        );
// snipped

现在,根据我的发现,当人们尝试直接在User或其他模型上设置权限时,通常会出现此错误。但我不这样做。我正在尝试为角色分配权限,但仍然会收到此错误。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

您未正确获取权限模型。您需要像这样调用first方法:

$detachFromTrainer = Permission::where('name', 'detach-from-trainer')->first();

此外,您可以使用where子句优化SQL查询,而不是像这样调用多个查询:

$permissions = Permission::whereIn('name', ['name1', 'name2' ...])->get();