手动创建Laravel迁移文件的方法

6
我正在创建一个简单的生成器,帮助我在工作中使用几行简单的YAML代码来创建模型、控制器、视图、路由和迁移。 到目前为止,一切看起来都很好,但我遇到了一个问题,尽管进行了大量搜索,但仍然毫无头绪。

我的工具会生成一个迁移文件,问题在于迁移文件名必须遵循特定的规则,这样 php artisan migrate 命令才能检测到该文件并进行迁移。

文件名必须以年、月、日和数字开头,然后是迁移的描述。 例如:2014_10_12_000000_create_users_table.php2014_10_12_100000_create_password_resets_table.php 现在,在文件开头放置日期很容易,但如何遵循数字规则呢? 每个新的迁移文件数字都要增加一。

我该如何检测最后创建的文件,以确定其数字,并创建一个数字比上一个迁移文件更大的新迁移文件?

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

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

但是命令php artisan migrate仍然无法检测到要迁移的文件,因为缺少版本号。那么我该怎么做呢?


你的“简易生成器”是一个控制台命令? - KmasterYC
3
你所需要的一切都在这里:https://github.com/illuminate/database/blob/master/Migrations/MigrationCreator.php#L178 - Winter
谢谢Winter。它起作用了! - Ahmed Essam
你的类名以数字开头而不是字母吗? - Winter
3个回答

5
如果你想知道迁移文件命名的实际格式,你应该查看 Illuminate\Database\Migrations\MigrationCreator 文件。你猜测的数字其实是一个时间戳,你可以在该文件中的以下函数中找到它:
protected function getDatePrefix()
{
    return date('Y_m_d_His');
}

以下是完整的文件名创建函数:
protected function getPath($name, $path)
{
    return $path.'/'.$this->getDatePrefix().'_'.$name.'.php';
}

希望这有所帮助。

谢谢。但是在尝试迁移时出现了以下错误: PHP解析错误:语法错误,意外的'2016'(T_LNUMBER),期望标识符(T_STRING) - Ahmed Essam

1
这是Laravel内置的机制。一旦您创建迁移,naming_convention将类似于timestamps和您表格的名称。
或者您可以使用Laravel Generator,或者您可以使用Carbon时区。

1
这不是一个数字,而是当前的时间戳,例如 143710。因此,您可以尝试使用以下方法获取它:
Carbon::now()->format('His');

1
使用Carbon库是不必要的,date('Y_m_d_His')足以生成整个日期前缀,并且不需要外部依赖。 - Winter
同意,它会得到相同的结果。 - Alexey Mezenin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接