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_table
和 AddTask2ToTasksTable
,然后运行 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 - 一次完成多个迁移(文件)的主要内容,如果未能解决你的问题,请参考以下文章