Database 如何存储所需的';基数';或';首字母';数据库的数据(尤其是Symfony)?
我使用doctrine migrations捆绑包来跟踪数据库结构中的更改。我希望在为我的应用程序部署/添加新服务器时确保:Database 如何存储所需的';基数';或';首字母';数据库的数据(尤其是Symfony)?,database,symfony,doctrine-orm,Database,Symfony,Doctrine Orm,我使用doctrine migrations捆绑包来跟踪数据库结构中的更改。我希望在为我的应用程序部署/添加新服务器时确保: (A) 数据库架构是最新的(条令:迁移:迁移) (B) 数据库始终包含一组预定义的数据 对于(B)项,一个很好的例子是角色。我希望有一组角色始终存在。我意识到数据库迁移是可能的,但我不喜欢将模式更改与数据更改混合在一起的想法。另外,如果我使用MySql迁移,我必须为我的测试数据库创建一个等效的Sqlite迁移 我知道的另一个选择是数据装置。然而,通过阅读文档,我感觉夹
- (A) 数据库架构是最新的(条令:迁移:迁移)
- (B) 数据库始终包含一组预定义的数据
处理将所需数据加载和管理到数据库中的最佳方法是什么?如果使用条令迁移,您可以使用整个数据库架构生成初始迁移,然后您应该生成迁移(
条令:迁移:生成
或条令:迁移:差异
)对于在数据库结构中所做的所有更改,并添加将迁移现有数据的查询
fixture被设计为预先填充数据(使用原则:fixture:load
),在我看来,它们应该使用最新的数据库模式保持最新,并在原则:迁移:迁移
/原则:模式:创建
之后执行
因此,最后:
- 使用初始数据库模式创建基本迁移(而不是执行
只需生成迁移文件并迁移它)doctor:schema:Create
- 为每个数据库架构更改和迁移现有数据(如角色名称更改)创建新迁移
- 使fixture与最新架构保持最新(您可以使用
选项,只更新fixture,而不是首先删除所有数据库数据)--append
原则:模式:创建
,然后运行原则:迁移:版本--添加--全部--无交互
(将所有迁移标记为迁移,因为您已经创建了最新的模式)和原则:装置:加载
,这将向数据库填充数据(也是最新版本,因此不需要从条令迁移文件进行数据迁移)
注意:现有实例不应使用原则:架构:更新
,而应仅使用原则:迁移:迁移
。在我们的应用程序中,我们甚至在应用程序/控制台
中阻止使用此命令:
use Symfony\Component\Console\Output\ConsoleOutput;
use Symfony\Component\Console\Helper\FormatterHelper;
// Deny using doctrine:schema:update command
if(in_array(trim($input->getFirstArgument()), ['doctrine:schema:update'])) {
$formatter = new FormatterHelper();
$output = new ConsoleOutput(ConsoleOutput::VERBOSITY_NORMAL, true);
$formattedBlock = $formatter->formatBlock(['[[ WARNING! ]]', 'You should not use this command! Use doctrine:migrations:migrate instead!'], 'error', true);
$output->writeln($formattedBlock);
die();
}
这是我根据自己的经验得出的结论。希望你会发现它有用:-)因为这里有一些投票,也许有人会对我为解决这个问题而发出的命令感兴趣。。虽然它还没有经过测试,也不可能接近生产,但它可能是一个开始