【发布时间】:2016-12-29 22:04:24
【问题描述】:
目前我正在尝试使用以下工作流程开发包更新系统。 我正在创建一个包含以下文件的包 (.zip):
- 迁移(文件夹)
- 迁移类
- ..
- 种子
- 种子文件
- ..
- package.xml
- UpdateInstructionSeeder.php
作为管理员,我可以在我的管理控制面板中上传这个包来更新我的数据库。
后端工作流程:
- 从 package.xml 中获取数据(获取可用的种子和迁移)
- 检查是否需要迁移/播种
- 迁移(工作正常)
- 种子(失败)
所以,如您所见,我的播种有些问题。
起初我尝试将我的种子(使用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();
}
}
我现在浪费了很多时间,而且我完全不知道如何以编程方式解决这个问题。
【问题讨论】:
标签: php composer-php laravel-5.1