如何手动创建laravel迁移文件

时间:2016-08-20 09:44:41

标签: php laravel

我正在创建一个简单的生成器,它可以帮助我完成模型,控制器,视图,路径,迁移,只需几行简单的YAML。 到目前为止,一切看起来都很棒,但我遇到了一个问题并且对它进行了大量搜索,但仍然没有得到任何结果。

我的工具生成迁移文件,迁移文件名必须遵循特定规则,因此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仍然无法检测文件以在没有数字的情况下迁移它。那我怎么能这样做呢?

3 个答案:

答案 0 :(得分:1)

它不是一个数字,它的当前时间戳,如143710.所以,你可以尝试这样的东西来获得它:

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

答案 1 :(得分:1)

它是Laravel的内置机制。只要您创建迁移, naming_convention 就会看起来像时间戳和您的表名。

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

答案 2 :(得分:1)

如果您想知道迁移命名文件的实际格式,您应该查看 Illuminate \ Database \ Migrations \ MigrationCreator 文件。您猜测作为排序的数字实际上是一个时间戳,您可以在该文件的以下函数中找到该时间戳:

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

以下是完整的文件名创建功能:

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

希望它有所帮助。