Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel/Composer:以编程方式添加种子_Php_Composer Php_Laravel 5.1 - Fatal编程技术网

Php Laravel/Composer:以编程方式添加种子

Php Laravel/Composer:以编程方式添加种子,php,composer-php,laravel-5.1,Php,Composer Php,Laravel 5.1,目前,我正试图开发一个具有以下工作流的包更新系统。 我正在创建包含以下文件的包(.zip): 迁移(文件夹) 迁移类 种子 种子文件 package.xml UpdateInstructionSeeder.php 作为一名管理员,我可以在我的管理控制面板上传这个包来更新我的数据库 后端工作流: 从package.xml获取数据(获取可用种子和迁移) 检查是否需要迁移/种子设定 迁移(工作正常) 种子(失败) 所以,正如你所看到的,我在播种方面遇到了一些麻烦 起初,我尝试(使用St

目前,我正试图开发一个具有以下工作流的包更新系统。 我正在创建包含以下文件的包(.zip):

  • 迁移(文件夹)
    • 迁移类
  • 种子
    • 种子文件
  • package.xml
  • UpdateInstructionSeeder.php
作为一名管理员,我可以在我的管理控制面板上传这个包来更新我的数据库

后端工作流:

  • 从package.xml获取数据(获取可用种子和迁移)
  • 检查是否需要迁移/种子设定
  • 迁移(工作正常)
  • 种子(失败)
  • 所以,正如你所看到的,我在播种方面遇到了一些麻烦

    起初,我尝试(使用
    Storage::move()
    )将种子从包种子文件夹移动到
    数据库/seed/
    目录。 我试图用
    Artisan::call('db:seed','--class'])为它设定种子但是
    类MyClass不存在
    出现错误。 我猜我的自动加载器有一些问题,所以我尝试用
    system('composer dump autoload',$test)转储它
    $test
    的输出是
    1
    ,但是
    自动加载的类图没有更新

    现在,我添加了一个
    UpdateInstructionSeeder.php
    ,它默认情况下在我的框架中可用,用于修复自动加载程序问题。 上传包后,我现在使用
    Storage::get()
    Storage::put()
    用我需要的种子更新包

    然后我用
    Artisan::call('make:seeder',['name'=>$className])添加种子
    ($className是包中我的种子的名称)并使用
    Storage::get()
    Storage::put()
    更新它们

    最后,我使用
    Artisan::call('db:seed','--class'=>'UpdateInstructionSeeder'])调用我的种子程序。结果:
    
    类MyClass不存在

    内容:

    包更新指令种子程序
    use Illuminate\Database\Seeder;
    use Illuminate\Database\Eloquent\Model;
    
    class UpdateInstructionSeeder extends Seeder
    {
       /**
        * Run the database seeds.
        *
        * @return void
        */
       public function run()
       {
           Model::unguard();
    
           $this->call(DemoTableSeeder::class);
    
           Model::reguard();
       }
    }
    
    包装可降级播种机

    use Illuminate\Database\Seeder;
    use Illuminate\Database\Eloquent\Model;
    
    class UpdateInstructionSeeder extends Seeder
    {
       /**
        * Run the database seeds.
        *
        * @return void
        */
       public function run()
       {
           Model::unguard();
    
           $this->call(DemoTableSeeder::class);
    
           Model::reguard();
       }
    }
    
    <?php
    
    use Illuminate\Database\Seeder;
    use Illuminate\Database\Eloquent\Model;
    
    class DemoTableSeeder extends Seeder
    {
        /**
         * Run the database seeds.
         *
         * @return void
         */
        public function run()
        {
            Model::unguard();
    
            DB::table('demos')->insert([
                [
                    'demoInt' => 1,
                    'demoString' => "a"
                ],
                [
                    'demoInt' => 11,
                    'demoString' => "aa"
                ],
            ]);
    
            Model::reguard();
        }
    }
    
    试试看

    php artisan optimize
    php artisan cache:clear 
    chmod -R guo+w storage
    composer dump-autoload
    
    最后

    php artisan db:seed
    
    您可以使用Artisan::call以编程方式调用所有这些命令,如下所示

    Artisan::call('optimize', ['--quiet' => true, '--force' => true]);
    
    编辑

    制作一个包含以下内容的
    .sh
    文件,并使用php运行它

    优化.sh



    像这样吗?它不起作用:(但老实说:我已经从互联网上复制了exec()-部分。这是转储自动加载器的正确方法吗?您可以创建一个.sh文件并放置所有这些命令,然后可以通过编程运行.sh文件