mHo*_*ses 3 database-migration symfony doctrine-orm
我有一个使用DoctrineMigrations捆绑的Symfony项目,我有一个非常简单的问题:当我运行迁移时(例如,当我将更新推送到生产时),我如何将数据插入数据库?
例如:我有一个实体,它是添加的类型.该实体是:
private $addType; // String
private $type1; // Boolean
private $type2; // Boolean
private $type3; // Boolean
Run Code Online (Sandbox Code Playgroud)
我添加了另一个字段($type4),我想在数据库中添加一条新记录,其值为:
$addType = 'Type number 4';
$type1 = false;
$type2 = false;
$type3 = false;
$type4 = true;
Run Code Online (Sandbox Code Playgroud)
如何使用DoctrineMigrations完成此操作?可能吗?
小智 11
来自@mHouses的接受的答案不是一个好主意,因为它会导致以后的麻烦.
在第一次迁移中,我正在创建一个包含用户的表,并填充一些用户,$em->persist($user);这些用户在开始时看起来很好.
但是一个月后,我在我的用户模型中添加了列" 电话 ".然后Doctrine在第一次迁移中使用此列生成INSERT语句,由于不存在的列" phone " 而失败.当然,在第一次迁移中它还不存在.所以ai认为我必须采用纯SQL INSERT方式:/
我只是问了一个相关的问题。
可以使用迁移捆绑包将数据添加到数据库。如果添加新属性并使用原则映射,则
php app/console doctrine:migrations:diff
命令将生成一个新的迁移文件。您可以使用以下语法将插入语句放入此文件中:
$this->addSql('INSERT INTO your_table (name) VALUES ("foo")');
不过,请确保将其放在自动生成的架构更改之后。如果您想将架构更改和数据更改分开,则可以使用
php app/console doctrine:migrations:generate
创建一个空的迁移文件以放入您的插入语句。
就像我在相关问题中所说的那样,这是一种方法,但是如果您想更改数据库中的数据,则需要手动创建这些方法。