在Laravel中,我们提供了与模型工厂结合使用的种子数据的概念,以便为测试环境填充数据。
当我们需要为生产填充数据时,我们应该如何进行(在何处放置代码)?例如,我可能有一个权限表,我需要添加一些默认权限以及架构创建。过了一段时间,我可能需要向我的应用添加新的权限。这些数据插入是否应与迁移保持一致?
我们应该使用什么机制来插入数据?模型或数据数组?我对数据数组的问题在于,模型中的任何业务都没有帮助:例如:强制转换或关系。
我知道,关于这个问题有两个讨论,但对我来说,解决方案并没有涵盖所有问题:
答案 0 :(得分:2)
当我们需要为生产填充数据时,我们应该如何处理(在何处放置代码)?
我们的团队为插入生产种子进行了全新的迁移(与创建表的迁移分开)。这样,如果您将来需要为生产数据添加更多种子,您只需进行新的独立迁移即可。
例如,您的第一次迁移可能是2016_03_05_213904_create_permissions_table.php
,然后是生产种子:2016_03_05_214014_seed_permissions_table.php
。
你可以将这些数据放在与创建表格相同的迁移中,但在我看来,迁移变得不那么可读并且可能违反了SRP。如果您将来需要添加更多种子,您将拥有两个不同的“标准”(原始迁移中的一组种子,另一种迁移中的另一种)。
回答你的第二个问题:
我们应该使用什么机制来插入数据?
我总是会使用您的模型的create()
方法来插入生产种子。这可确保正在侦听模型创建事件的任何事件侦听器正确触发。正如您所说,在创建模型时可能需要触发额外的代码。