【问题标题】:How to work with migrations如何使用迁移
【发布时间】:2013-01-16 05:20:56
【问题描述】:

就在几周前,我开始使用 Laravel(我添加了 RoR 作为标签,因为我知道两者之间的迁移有点相似),并且仍在努力适应迁移。我尝试阅读一些文档和教程(针对 Laravel 和其他使用它们的框架,如 Rails),它们通常很好地解释了如何使用它们,但我仍然无法掌握如何有效地使用它们。我有一些问题:

  1. 如果我在视图中创建了一个表,然后决定添加一些列并可能删除一些其他列,我该怎么做?我了解编辑现有迁移不是正确的方法。我是否添加了一个新的迁移来添加新列并删除旧列?如果是这样,它们是否有命名约定,在创建一个名为 users 的表时,所有教程通常都将迁移命名为 create_users,我是否将此迁移称为 update_users?如果我想对用户进行另一个更新,那么我将有两个名为 Update_Users 的类。此外,我在使用这种方法时遇到的问题是我感觉我对数据库结构没有很好的了解,一个表列可能分散在十几个迁移文件中。

    李>
  2. 如果我想用测试数据填充我的表,最好在单独的迁移中这样做,比如 Laravel 4 中的种子?

  3. 我应该在每次迁移中只有一个表吗?据了解,在我的 create_users 迁移中,我创建了三个表;用户、角色和角色用户,将它们放在单独的迁移中更好吗?

【问题讨论】:

    标签: ruby-on-rails laravel


    【解决方案1】:
    1. 编辑现有迁移不是可行的方法。否则,在部署到生产系统时将不会使用更改(迁移编号存储在数据库本身中以避免再次运行它们)。添加另一个迁移以进行更改。对于更新/更改迁移没有真正的命名约定。所以用你想要的方式命名它。但是,指出您进行迁移的原因的专有名称可能会有所帮助(例如 AddCommentsToUsers)。

    2. Rails 具有种子机制(请参阅Screencast)。你应该使用这个。数据迁移有其缺点。

    3. 我更喜欢每次迁移一个表。如果第一个表创建完成但第二个没有完成,那么稍后当您尝试重新运行迁移时(在解决任何问题之后)会遇到麻烦。

    【讨论】:

    • 谢谢,我觉得这回答了我的大部分问题。但是,我没有使用 Rails,而是 PHP 框架 Laravel(迁移类似),并且 Laravel 还不支持种子,下一个版本将支持但它只是作为测试版发布,所以我还没有进行切换。但我想我仍然应该使用单独的迁移来使用测试数据填充表?
    • 嗯,我有时会使用数据迁移并将所有数据放入其中。但我确保,我可以通过使用 find_or_create 或类似机制(仅在尚不可用时创建)尽可能频繁地运行迁移。
    猜你喜欢
    • 2014-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-22
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多