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

Laravel/Composer: adding seeds programmatically

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

作为管理员,我可以在我的管理控制面板中上传这个包来更新我的数据库。

后端工作流程:

  1. 从 package.xml 获取数据(获取可用的种子和迁移)
  2. 检查是否需要 migration/seeding
  3. 迁移(工作正常)
  4. 种子(失败)

因此,如您所见,我在播种方面遇到了一些问题。

起初我尝试将我的种子从包种子文件夹移动(使用 Storage::move())到 database/seed/ 目录。 我试图用 Artisan::call('db:seed','--class']); 为它播种,但出现了 Class MyClass does not exist 错误。 我猜我的自动加载器有一些问题,所以我试着用 system('composer dump-autoload', $test); 来转储它。 $test 的输出是 1autoload_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();
    }
}

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

尝试

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