Laravel migrate - 一次完成多个迁移(文件)

Posted

技术标签:

【中文标题】Laravel migrate - 一次完成多个迁移(文件)【英文标题】:Laravel migrate - multiple migrations (files) in one go 【发布时间】:2016-07-06 19:10:11 【问题描述】:

说,我有多个迁移文件更新单个表。

例如

2016_03_20_072730_create_tasks_table.php 2016_03_20_075467_create_tasks_table.php

... 来自不同团队成员的回购。 每个人都在调整表格中的某些内容,例如添加一列。

当我尝试:

php 工匠迁移

我得到错误:

PHP 致命错误:无法声明类 CreateTasksTable,因为名称为 已在 U:\www\b10\database\migrations\2016_03_20_072737_create_tasks_ 中使用 le.php 在第 30 行 [Symfony\组件\调试\异常\致命错误异常] 无法声明类 CreateTasksTable,因为该名称已在使用中

应该如何处理上述情况?

编辑

代码如下:

2016_03_20_072730_create_tasks_table.php:

类 CreateTasksTable 扩展了迁移 /** * 运行迁移。 * * @return 无效 */ 公共函数 up() Schema::table('tasks', function ($table) $table->string('task1'); ); /** * 逆转迁移。 * * @return 无效 */ 公共函数向下() Schema::drop('tasks');

2016_03_20_075467_create_tasks_table.php:

类 CreateTasksTable 扩展了迁移 /** * 运行迁移。 * * @return 无效 */ 公共函数 up() Schema::table('tasks', function ($table) $table->string('task2'); ); /** * 逆转迁移。 * * @return 无效 */ 公共函数向下() Schema::drop('tasks');

【问题讨论】:

【参考方案1】:

每个迁移都必须有一个唯一的类名。将第二个重命名为更合理的名称,例如 2016_03_20_075467_add_task2_to_tasks_tableAddTask2ToTasksTable,然后运行 ​​composer dump-autoload 以使 Laravel 找到更改。现在您可以迁移了。

编辑:现在两个迁移的代码都被编辑到问题中,我可以看到第一个迁移有同样的问题,应该以同样的方式重命名。可能会在更早的某个时候进行初始创建迁移。您应该停止使用 create 命名编辑迁移,因为您实际上并没有创建表。

【讨论】:

是的,我从错误中得出了同样的结论,但是迁移应该比手动做数据库要大得多。假设你应该只获得最新的 repo,运行 migrate 并喝杯啤酒。但是有了这个,手动更新似乎并不落后于这个“自切片面包以来的超级好东西”;)现在,您必须调整迁移文件,合并迁移文件,或者将每个文件移动到临时文件并使用 - -path,等等。所以,我猜它是一个柠檬。话多,小把戏。除非有一个简单的方法 - 所以我的问题。 这很简单——你只需要逻辑地命名你的迁移。您不必在数据库中做任何事情。让我们这样说吧:使用模型也很容易。但是,如果您尝试将两个模型命名为相同的东西,它就行不通了。您是否会争辩说这也使模型难以使用? :) 只需教您的团队成员为不同的迁移赋予不同的名称,这就是您所需要的一切。 迁移文件由 Laravel 自动创建。既然有创建快捷方式,Laravel 会很难在类名中添加一些随机字符串/散列吗?除非有什么东西反对这个程序。谢谢乔尔的宝贵时间。 我通常这样做:对于表创建迁移我使用php artisan make:migration create_tablename --create=tablename,对于表编辑迁移我使用php artisan make:migration add_fieldname_to_tablename --table=tablename。我可能会使用编辑/删除/删除等,而不是添加,这取决于我要完成的工作。这样,除非您不小心尝试将重复的字段或表添加到数据库中,否则您可以保证不会重复 - 在这种情况下,它无论如何都不会工作。希望有帮助。 :)

以上是关于Laravel migrate - 一次完成多个迁移(文件)的主要内容,如果未能解决你的问题,请参考以下文章

flask-migrate数据库迁移

Laravel - 一次多个数据库[重复]

“php artisan migrate”显示“没有要迁移的东西”

Laravel 每次迁移多个表

Laravel Migrate

Laravel入坑指南——数据迁移与填充