这个问题困扰了我一段时间,对 Google 来说似乎是个棘手的问题。
我正在寻找使我的代码、我的数据库结构和数据库数据彼此保持同步的最佳(或至少是一种体面的)方法。我目前正在使用 Laravel 5,它为我提供了迁移和种子。第一个非常适合数据库结构更改。后者似乎还可以,但没有考虑时间。
所以我有几个月前设置的 laravel 安装。它有 20 个表格和一些种子文件。 现在我重命名了现有表结构中的一列。
当我从头开始我的 Laravel 站点时,我显然首先运行迁移,否则将根本没有表。之后,我运行了我的种子,但对已更改列的插入查询失败了。
问题来了:播种机不应该依赖于迁移的时间吗?还是应该在更改数据库结构时更改所有种子?必须有更好的方法,我错过了什么吗?应该怎么做?
最佳答案
种子的问题在于它们需要更新以反射(reflect)当前模式,而不是它们与生成时相关的任何历史模式。
这就是为什么通常最好尽量减少种子。如果不可避免地需要一个干净的种子数据库,您可以将其提供给需要从事该项目的任何人。种子数据库的风险在于它可能包含不在迁移中的修改,例如当您删除迁移或应用您从未提交给代码的迁移时。
理想情况下,您的项目应该通过运行迁移和从种子构建来从头开始工作,您应该间歇性地测试这个过程以确保您没有破坏任何东西。
关于php - 保持代码、数据库结构和数据库数据在修订之间同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51648364/