epigra/pmgen

此包已废弃,不再维护。未建议替代包。

Laravel 包迁移生成器

dev-master 2016-12-22 14:34 UTC

This package is not auto-updated.

Last update: 2020-01-23 18:54:08 UTC


README

#Epigra 包迁移生成器 允许您为任何 Laravel 支持的包添加迁移生成支持。

##使用方法

假设您正在开发一个名为 newpackage 的包,您在 resources/generators 目录下预先定义了模板,而您的迁移命令位于 console 目录。

namespace YourNamespace\Newpackage\Console;

use Epigra\PMGen\MigrationGenerator;

class MigrationCommand extends MigrationGenerator
{

    protected $signature = 'newpackage:migrate';
    protected $description = 'Creates a migrations for questionable items.';
}

现在您可以通过以下方式从您的包服务提供者中注册此命令

public function boot(){
	$this->commands('command.yourpackagename.migrate');
}
public function register(){		
	$this->app->singleton('command.yourpackagename.migrate', function ($app) {
		return new \YourNamespace\Newpackage\Console\MigrationCommand();
	});
}
public function provides(){
	return array('command.yourpackagename.migrate');
}

为了使任何目标目录更改从父类中,您可以重新定义函数

public function getModuleDirectory()
{            
    return dirname((new \ReflectionClass(static::class))->getFileName()).'/../';
}

public function getGeneratorsDirectory()
{
    return $this->moduleDirectory.'/Resources/generators';
}

###MigrationGenerator 的基本逻辑流程

  • 获取模块目录 调用类目录 + .. / 或通常为你的vendor/yourpackage/src(假设您从src\Console\YourClass调用)
  • 决定生成器目录 ``模块目录 + '/Resources/generators'`
  • 获取生成器目录中的所有文件,并
    • 编译相关的 blade 文件
    • 将这些文件以当前时间戳保存到 database/migrations 目录中,如果它们尚未创建。(可能需要composer dump-autoload)
  • 如果您需要排序您的迁移(出于某种原因,如外键引用等),您可以在生成器目录中添加 一个数字和一个下划线 使它们按名称可排序(如 0_create_xxx_table.php1_create_yyy_table.php)。这样,迁移也可以按顺序生成。