我需要使用演示数据快速设置演示站点,包括每小时重置公共演示站点的数据。由于我们的数据使用相对于“now”的时间戳(例如archived_timestamp),我们不能只恢复具有固定时间戳的sql转储。
我的想法是使用Yii2迁移来完成该任务,PHP代码生成时间戳并插入演示数据。
如何实现?
答案 0 :(得分:1)
我建议将迁移文件存储在一个单独的子目录中,我们的演示设置不会干扰普通的" migrate / up"和"迁移/下降"流程?当然
此迁移是否绑定到文件命名方案,或者可以是例如demo-data-setup.php?在yii2中(但也在其他迁移工具中),迁移文件与正确的模板相关,通常是datetime_migration_name.php
但是对于我的正确和经常创建/填充和删除/更新/删除的经验在某些情况下使用控制器会很有用,特别是如果要通过网页或URL启动这些活动而不必启动控制台命令使用具有相应操作的控制器甚至可以上下移动,并且可能是对操作结果进行适当回显的视图
答案 1 :(得分:1)
是的,您可以使用控制器映射分配命令名称,配置迁移路径&表并使用它而不会干扰原始的迁移命令。
在控制台应用的配置中,添加带演示的控制器地图
'controllerMap' => [
'demo-setup' => [
'class' => 'yii\console\controllers\MigrateController',
'migrationPath' => '@common/migrations/demo',
'migrationTable' => '{{%demo_setup_migration}}'
],
cd到您的控制台应用程序目录并使用demo-setup命令,就像使用migrate命令一样。
./ yii demo-setup / create schema ./yii demo-setup / create sample-data
./ yii demo-setup
您可能希望设置一个cron作业来重新创建数据库并应用迁移或重新应用迁移到现有数据库以覆盖演示数据。
答案 2 :(得分:1)
Yii2迁移是否适合该工具? 只要将演示迁移存储在与主迁移不同的位置。说实话,当我开始一个新的Yii2项目时,我总是从创建演示数据的迁移开始(我还创建了第一个具有迁移的用户)。我通常使用faker和我自己的一些类来生成演示数据。
是否建议将迁移文件存储在一个单独的子目录中,我们的演示设置不会干扰普通的“迁移/升级”和“迁移/关闭”过程?是的,你应该这样做!
此迁移是否绑定到文件命名方案,或者可以是例如demo-data-setup.php?从官方Yii2文档中了解命名迁移:
注意:因为name参数将用作生成的迁移类名称的一部分,所以它应该只包含字母,数字和/或下划线字符。
Ps。:不要overengineer你的项目
答案 3 :(得分:0)
Yii2迁移是否适合该工具?
不,迁移是针对数据库结构更改(添加列,设置索引,...)而不是使用数据填充表。在你的情况下,我会写一个组件,它具有你需要恢复的每个模型的删除/创建功能。然后,您可以使用cron任务调用组件。
答案 4 :(得分:0)
您可以使用fixtures。 夹具是测试的重要部分。它们的主要目的是将环境设置为固定/已知状态,以便您的测试可重复并以预期方式运行。 Yii提供了一个夹具框架,允许您精确定义夹具并在使用Codeception运行测试时轻松使用它们。