2013-01-15 48 views
0

就在几周前,我开始使用Laravel(我将RoR作为标记添加为标签,因为我知道两者之间的迁移类似),并且仍然习惯于使用迁移。我试着阅读一些文档和教程(Laravel和其他使用它们的框架,比如Rails),他们通常会很好地解释如何使用它们,但我仍然无法掌握如何有效地使用它们。有些问题我有:如何使用迁移

  1. 如果我在一个视图中创建一个表,并稍后决定添加几列,也许下降几其他,我该怎么办呢?我知道编辑现有的迁移并不是正确的方法。我是否添加了一个新的迁移,添加了新列并删除了旧列?如果是的话,是否有一个命名约定,当创建一个名为users的表时,所有的教程通常都将迁移命名为create_users,我称之为迁移update_users?如果我想对用户进行另一次更新,那么我会有两个名为Update_Users的类。另外,我用这种方法遇到的问题是,我感觉我对数据库结构没有很好的概述,表列可能分散在十几个迁移文件中。

  2. 如果我想用测试数据填充我的表格,那么在单独的迁移过程中,比如Laravel 4中的种子更好吗?

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

回答

1
  1. 编辑现有的迁移不是要走的路。否则,在部署到生产系统时不会使用这些更改(迁移编号存储在数据库本身中以避免再次运行)。添加另一个迁移来执行更改。更新/更改迁移没有真正的命名约定。所以按照你想要的方式命名。但是一个合适的名称指出你为什么进行迁移可能会有帮助(例如AddCommentsToUsers)。

  2. 导轨有播种机制(见Screencast)。你应该使用这个。数据迁移有其缺点。

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

+0

谢谢,我觉得这回答了我的大部分问题。然而,我没有使用Rails,而是使用PHP框架Laravel(类似的迁移)和Laravel不支持种子,但下一个版本将会发布,因为我还没有做出转换。但我想我仍然应该使用单独的迁移来为测试数据填充表格? – Nait

+0

那么,我有时会使用数据迁移并将所有数据都放在那个数据迁移中。但我确定,我可以通过使用find_or_create或类似的机制(只有在尚不可用时才创建),按照需要经常运行迁移。 – alto