代码之家  ›  专栏  ›  技术社区  ›  Prafulla Kumar Sahu umang naik

播种时为角色分配权限-委托

  •  1
  • Prafulla Kumar Sahu umang naik  · 技术社区  · 6 年前

    拉威尔5.6.3 委托:1.9

    <?php
    
    use Illuminate\Database\Seeder;
    use App\models\Permission;
    use App\models\Role;
    
    class RoleSeeder extends Seeder
    {
        /**
         * Run the database seeds.
         *
         * @return void
         */
        public function run()
        {
           $role =  Role::create([
                'name' => 'super-admin',
                'display_name' => 'Super Admin',
                'description' => 'This will be one permission, that can not be assigned or created.'
            ]);
    
            $permission = Permission::first()->where('name', 'super-admin')->first();
            $role->attachPermission($permission);
        }
    }
    

    和模型

    <?php
    
    namespace App\models;
    
    use Illuminate\Database\Eloquent\Model;
    use Zizaco\Entrust\EntrustRole;
    
    use App\models\Permission;
    use App\User;
    
    class Role extends EntrustRole
    {
        public function permissions()
        {
            return $this->belongsToMany(Permission::class);
        }
    
        public function users()
        {
            return $this->belongsToMany(User::class);
        }
    }
    

    D:\work\www\myapp>php artisan db:seed --class=PermissionSeeder
    
    D:\work\www\myapp>php artisan db:seed --class=RoleSeeder
    
       Symfony\Component\Debug\Exception\FatalThrowableError  : Class 'App\Permission' not found
    
      at D:\work\www\myapp\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Concerns\HasRelationships.php:656
        652|      * @return mixed
        653|      */
        654|     protected function newRelatedInstance($class)
        655|     {
      > 656|         return tap(new $class, function ($instance) {
        657|             if (! $instance->getConnectionName()) {
        658|                 $instance->setConnection($this->connection);
        659|             }
        660|         });
    
      Exception trace:
    
      1   Illuminate\Database\Eloquent\Model::newRelatedInstance("App\Permission")
          D:\work\www\myapp\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Concerns\HasRelationships.php:418
    
      2   Illuminate\Database\Eloquent\Model::belongsToMany("App\Permission", "permission_role", "role_id", "permission_id")
          D:\work\www\myapp\vendor\zizaco\entrust\src\Entrust\Traits\EntrustRoleTrait.php:80
    
      Please use the argument -v to see more details.
    
    
    Using -v
    
    D:\work\www\myapp>php artisan db:seed --class=RoleSeeder -v
    
       Symfony\Component\Debug\Exception\FatalThrowableError  : Class 'App\Permission' not found
    
      at D:\work\www\myapp\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Concerns\HasRelationships.php:656
        652|      * @return mixed
        653|      */
        654|     protected function newRelatedInstance($class)
        655|     {
      > 656|         return tap(new $class, function ($instance) {
        657|             if (! $instance->getConnectionName()) {
        658|                 $instance->setConnection($this->connection);
        659|             }
        660|         });
    
      Exception trace:
    
      1   Illuminate\Database\Eloquent\Model::newRelatedInstance("App\Permission")
          D:\work\www\myapp\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Concerns\HasRelationships.php:418
    
      2   Illuminate\Database\Eloquent\Model::belongsToMany("App\Permission", "permission_role", "role_id", "permission_id")
          D:\work\www\myapp\vendor\zizaco\entrust\src\Entrust\Traits\EntrustRoleTrait.php:80
    
      3   Zizaco\Entrust\EntrustRole::perms()
          D:\work\www\myapp\vendor\zizaco\entrust\src\Entrust\Traits\EntrustRoleTrait.php:177
    
      4   Zizaco\Entrust\EntrustRole::attachPermission()
          D:\work\www\myapp\database\seeds\RoleSeeder.php:23
    
      5   RoleSeeder::run()
          D:\work\www\myapp\vendor\laravel\framework\src\Illuminate\Container\BoundMethod.php:29
    
      6   call_user_func_array([])
          D:\work\www\myapp\vendor\laravel\framework\src\Illuminate\Container\BoundMethod.php:29
    
      7   Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
          D:\work\www\myapp\vendor\laravel\framework\src\Illuminate\Container\BoundMethod.php:87
    
      8   Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application), Object(Closure))
          D:\work\www\myapp\vendor\laravel\framework\src\Illuminate\Container\BoundMethod.php:31
    
      9   Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application), [])
          D:\work\www\myapp\vendor\laravel\framework\src\Illuminate\Container\Container.php:564
    
      10  Illuminate\Container\Container::call()
          D:\work\www\myapp\vendor\laravel\framework\src\Illuminate\Database\Seeder.php:122
    
      11  Illuminate\Database\Seeder::__invoke()
          D:\work\www\myapp\vendor\laravel\framework\src\Illuminate\Database\Console\Seeds\SeedCommand.php:63
    
      12  Illuminate\Database\Console\Seeds\SeedCommand::Illuminate\Database\Console\Seeds\{closure}()
          D:\work\www\myapp\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Concerns\GuardsAttributes.php:122
    
      13  Illuminate\Database\Eloquent\Model::unguarded(Object(Closure))
          D:\work\www\myapp\vendor\laravel\framework\src\Illuminate\Database\Console\Seeds\SeedCommand.php:64
    
      14  Illuminate\Database\Console\Seeds\SeedCommand::handle()
          D:\work\www\myapp\vendor\laravel\framework\src\Illuminate\Container\BoundMethod.php:29
    
      15  call_user_func_array([])
          D:\work\www\myapp\vendor\laravel\framework\src\Illuminate\Container\BoundMethod.php:29
    
      16  Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
          D:\work\www\myapp\vendor\laravel\framework\src\Illuminate\Container\BoundMethod.php:87
    
      17  Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application), Object(Closure))
          D:\work\www\myapp\vendor\laravel\framework\src\Illuminate\Container\BoundMethod.php:31
    
      18  Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application), [])
          D:\work\www\myapp\vendor\laravel\framework\src\Illuminate\Container\Container.php:564
    
      19  Illuminate\Container\Container::call()
          D:\work\www\myapp\vendor\laravel\framework\src\Illuminate\Console\Command.php:179
    
      20  Illuminate\Console\Command::execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Illuminate\Console\OutputStyle))
          D:\work\www\myapp\vendor\symfony\console\Command\Command.php:251
    
      21  Symfony\Component\Console\Command\Command::run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Illuminate\Console\OutputStyle))
          D:\work\www\myapp\vendor\laravel\framework\src\Illuminate\Console\Command.php:166
    
      22  Illuminate\Console\Command::run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
          D:\work\www\myapp\vendor\symfony\console\Application.php:886
    
      23  Symfony\Component\Console\Application::doRunCommand(Object(Illuminate\Database\Console\Seeds\SeedCommand), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
          D:\work\www\myapp\vendor\symfony\console\Application.php:262
    
      24  Symfony\Component\Console\Application::doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
          D:\work\www\myapp\vendor\symfony\console\Application.php:145
    
      25  Symfony\Component\Console\Application::run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
          D:\work\www\myapp\vendor\laravel\framework\src\Illuminate\Console\Application.php:89
    
      26  Illuminate\Console\Application::run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
          D:\work\www\myapp\vendor\laravel\framework\src\Illuminate\Foundation\Console\Kernel.php:122
    
      27  Illuminate\Foundation\Console\Kernel::handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
          D:\work\www\myapp\artisan:37
    
    D:\work\www\myapp>
    

    更新

    >>> $permission = App\models\Permission::first();
    => App\models\Permission {#2923
         id: 1,
         name: "super-admin",
         display_name: "Super Admin",
         description: "This will be one permission, that can not be assigned or created.",
         created_at: "2018-08-31 05:01:08",
         updated_at: "2018-08-31 05:01:08",
       }
    >>> $role = App\models\Role::first();
    => App\models\Role {#2925
         id: 1,
         name: "super-admin",
         display_name: "Super Admin",
         description: "This will be one permission, that can not be assigned or modified.",
         created_at: "2018-08-31 05:01:10",
         updated_at: "2018-08-31 05:01:10",
       }
    >>> $role->attachPermission($permission);
    PHP Error:  Class 'App/Permission' not found in D:/work/www/myapp/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasRelationships.php on line 656
    >>>
    

    正确的方法是什么?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Prafulla Kumar Sahu umang naik    6 年前

    在…的底部 https://github.com/Zizaco/entrust 上面写着回购

    如果您的应用程序使用自定义命名空间,那么您需要告诉 在您的权限和角色模型所在的位置,您可以通过编辑 中的配置文件 config/entrust.php

    因此,您必须将权限模型名称空间更改为 App\models\Permission 默认设置为 App\Permission

    所以编辑 配置/委托.php permission

    'permission' => 'App\models\Permission'
    

    'role' => 'App\models\Role'