如何手动创建 laravel 迁移文件

Posted

技术标签:

【中文标题】如何手动创建 laravel 迁移文件【英文标题】:How to create a laravel migration file manually 【发布时间】:2016-12-27 10:03:09 【问题描述】:

我正在创建一个简单的生成器,它将帮助我通过简单的几行 YAML 来创建模型、控制器、视图、路由和迁移。 到目前为止,一切看起来都很好,但我遇到了一个问题,搜索了很多,但仍然一无所获。

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

文件名必须以年、月、日和数字开头,然后是迁移描述。 例如。 2014_10_12_000000_create_users_table.php 2014_10_12_100000_create_password_resets_table.php 现在,将日期放在文件的开头很容易,但是我怎样才能遵循数字规则呢? 每个新的迁移文件该数字都会增加 1。

如何检测最后创建的文件以了解其编号并创建一个编号大于上一次创建的迁移文件的新迁移文件?

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

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

但命令php artisan migrate 仍然无法检测到没有编号的文件进行迁移。那我该怎么做呢?

【问题讨论】:

您的simple generator 是控制台命令? 您需要的一切都在这里:github.com/illuminate/database/blob/master/Migrations/… 谢谢冬天。成功了! 您的班级名称是否以数字而不是字母开头? 【参考方案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';

希望对你有帮助。

【讨论】:

谢谢。但是我在尝试迁移 PHP Parse 时遇到了这个错误错误:语法错误,意外的 '2016' (T_LNUMBER),需要标识符 (T_STRING)【参考方案2】:

这不是一个数字,它是当前时间戳,比如 143710。所以,你可以尝试这样的方法来获取它:

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

【讨论】:

没有必要为此使用 Carbon,date('Y_m_d_His') 足以满足整个日期前缀并且不需要外部依赖 同意,结果是一样的。【参考方案3】:

这是 Laravel 的内置机制。一旦您创建了迁移,naming_convention 将看起来像 timestamps 和您的表的名称。

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

【讨论】:

以上是关于如何手动创建 laravel 迁移文件的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Laravel 项目中删除所有迁移但保留表和字段

如何在子目录 Laravel 中正确配置 htaccess?

Laravel 如何创建数据透视表?

如何通过laravel创建数据透视表

手把手教你跑Larave框架实战笔记系列之二

Laravel中如何做数据库迁移