首页 > 解决方案 > 如何解决laravel中Database Seeder的问题

问题描述

我正在使用 databaseeder 将控制器的名称存储在权限表中,但我不知道为什么会出现错误。该表与使用 belongsToMany 关系的角色表有关系。 这是我的 Role.php

public function permissions()
    {
        return $this->belongsToMany(Permission::class)->withTimeStamps();
    }

这是我的 Permission.php

protected $fillable=['id','name','controller'];
    public function roles()
    {
        return $this->belongsToMany(Role::class)->withTimeStamps();
    }

这是我的databaseSeeder.php

$superrole= Role::create([
            'name'=>'super admin',
        ]);
$permission_ids = [];
        $route_name = [];
        $controllers = [];
        foreach (Route::getRoutes()->getRoutes() as $route)
        {
            $action = $route->getAction();
            if (array_key_exists('as', $action)) {
                $route_name = $action['as'];
            }
            if (array_key_exists('uses', $action)) {
                $controllers = $action['uses'];
            }

             $permission_check = Permission::whereIn('name' , $route_name)
            ->whereIn('controller' , $controllers)->first();
             if(!$permission_check)
             {
                 $permission = new Permission;
                 $permission->controller = $controllers;
                 $permission->name = $route_name;
                 $permission->save();
                 $permission_ids[] = $permission->id;
             }
        }
       $superrole->permissions()->attach($permission_ids);

但是当我尝试运行 db:seed iam 时出现此错误![在此处输入图像描述] 1 这是 dd($controllers) 在此处输入图像描述

和 dd($route_name) 在此处输入图像描述

标签: phplaraveleloquent

解决方案


推荐阅读