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

时间:2016-12-29 22:04:24

标签: php composer-php laravel-5.1

目前,我正在尝试使用以下工作流程开发包更新系统。 我正在使用以下文件创建一个包(.zip):

  • 迁移(文件夹)
    • migrationClass
    • ..
  • 种子
    • seedfile
    • ..
  • package.xml中
  • UpdateInstructionSeeder.php

作为管理员,我可以在管理控制台中上传此软件包以更新我的数据库。

后端工作流程:

  1. 从package.xml获取数据(获取可用的种子和迁移)
  2. 检查是否需要迁移/播种
  3. 迁移(正常工作)
  4. 种子(失败)
  5. 所以,你可以看到我的播种有些麻烦。

    首先,我尝试将(种子Storage::move())种子从包种子文件夹移动到database/seed/目录。 我尝试使用Artisan::call('db:seed','--class']);播种,但出现Class MyClass does not exist错误。 我猜我的自动加载器有一些问题,所以我试图用system('composer dump-autoload', $test);转储它。 $test的输出为1,但autoload_classmap未更新。

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

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

    最后我用Artisan::call('db:seed','--class' => 'UpdateInstructionSeeder']);给我的播种机打电话。结果: Class MyClass does not exist

    内容:

    包UpdateInstructionSeeder     

    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();
       }
    }
    

    包DemoTableSeeder

    <?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();
        }
    }
    

    我现在浪费了很多时间,而且我完全不知道以编程方式解决这个问题

1 个答案:

答案 0 :(得分:1)

尝试

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

运行

optimize.sh

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

https://laravelcollective.com/docs/5.0/ssh