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