2016-08-20 48 views
2

我创建了一个简单的生成器,它可以帮助我创建模型,控制器,视图,路径,用简单的几行YAML进行迁移。 一切看起来很好,但我有一个问题,并搜索了很多关于它,但仍然没有得到。如何手动创建laravel迁移文件

我的工具生成一个迁移文件,事情是迁移文件名必须遵循特定的规则,因此php artisan migrate命令可以检测该文件并进行迁移。

文件名必须用年,月,日和编号,然后迁移的描述开始。例如, 。现在2014_10_12_000000_create_users_table.php 2014_10_12_100000_create_password_resets_table.php ,人们很容易把日期在文件的开头,但我怎么可以按照号码规则? 数字每增加一个新的迁移文件。

如何检测创建以了解它的数量,并作出新的迁移文件与一些比创建的最后一个迁移文件更大的最后一个文件?

与此同时,我使用此代码创建迁移文件名。

$migrationFileName = date('y').'_'.date('m').'_'.date('d').'_'.'create'.ucfirst($name).'Table'; 

但命令php artisan migrate仍无法检测到文件迁移它没有数。那我该怎么做?

+0

你的简单生成器是一个控制台命令? – KmasterYC

+3

您需要的一切都在这里:https://github.com/illuminate/database/blob/master/Migrations/MigrationCreator.php#L178 – Winter

+0

谢谢冬天。有效 ! –

回答

0

这不是一个数字,它的当前时间,像143710.所以,你可以尝试这样的事情来得到它:

Carbon::now()->format('His'); 
+0

使用碳这是不必要的,'日期('Y_m_d_His')'是足够的整个日期前缀,并且不需要外部依赖关系 – Winter

+0

同意,它会得到相同的结果。 –

0

这是Laravel的内在机制。只要你创建迁移时,naming_convention看起来像一个时间戳你的表的名称。

否则你可以使用Laravel Generator。或者你可以使用Carbon时区。

0

如果您想知道迁移文件命名的实际格式是什么,您应该查看Illuminate \ Database \ Migrations \ MigrationCreator文件。你都在猜测作为订购的数量实际上是你可以在下面的函数在该文件的时间戳:

protected function getDatePrefix() 
{ 
    return date('Y_m_d_His'); 
} 

而且下面是完整的文件名创建功能:

protected function getPath($name, $path) 
{ 
    return $path.'/'.$this->getDatePrefix().'_'.$name.'.php'; 
} 

希望它可以帮助。

+0

谢谢。但我在尝试迁移时遇到此错误 PHP解析错误:语法错误,意外的'2016'(T_LNUMBER),期待标识符(T_STRING) –

+0

您能否显示您的更新代码? –