我有这个代码,但不起作用:
<?php
namespace Application\Migrations;
use Doctrine\DBAL\Migrations\AbstractMigration,
Doctrine\DBAL\Schema\Schema;
/**
* Auto-generated Migration: Please modify to your need!
*/
class Version20131021150555 extends AbstractMigration
{
public function up(Schema $schema)
{
// this up() migration is auto-generated, please modify it to your needs
$this->abortIf($this->connection->getDatabasePlatform()->getName() != "mysql", "Migration can only be executed safely on 'mysql'.");
$this->addSql("ALTER TABLE person ADD tellphone LONGTEXT DEFAULT NULL");
$em = $em = $this->getDoctrine()->getEntityManager();
$persons = $em->getRepository('AutogestionBundle:Person')->fetchAll();
foreach($persons as $person){
$person->setTellPhone($person->getCellPhone());
$em->persist($person);
}
$em->flush();
}
public function down(Schema $schema)
{
// …Run Code Online (Sandbox Code Playgroud) 我使用doctrine迁移包来跟踪数据库结构中的更改.我想确保在为我的应用程序部署/添加新服务器时:
对于(B),一个很好的例子是角色.我希望始终存在一组特定的角色.我意识到数据库迁移是可能的,但我不喜欢将模式更改与数据更改混合在一起的想法.此外,如果我使用MySql迁移,我将不得不为我的测试数据库创建一个等效的Sqlite迁移.
我知道的另一个选择是数据夹具.然而,通过阅读文档,我感觉夹具更适合加载测试数据.此外,如果我更改了角色名称,我不知道如何使用fixture更新它(因为它们要么在加载或追加之前删除数据库中的所有数据).如果我使用append,那么唯一键也是一个问题.
我正在考虑创建一些带有一组配置文件的命令,并确保某些表总是处于与配置文件匹配的一致状态 - 但如果存在另一个选项,我当然希望使用它.
处理将所需数据加载到数据库中的最佳方法是什么?