有实体用户和公司。公司有user_id。
现在表格结构发生变化,下一个用户可以代表许多公司,反之亦然(多对多,例如一对多 - 多对一)。这在中间引入了CompanyRepresentative Entity,其中包含字段user_id,company_id和role。公司user_id将随着这一变化而被删除。
如何针对这种情况制作数据迁移脚本?现在每个公司都必须有一个CompanyRepresentative条目,用于连接目前连接的同一个用户和公司。
环境是使用Doctrine和Mysql的symfony 4应用程序。
答案 0 :(得分:1)
主义迁移功能preUp
和postUp
。在preUp中,可以选择所有需要的数据,在postUp中,可以在数据库结构更改后将这些数据插入到正确的位置。
例如
public function preUp(Schema $schema)
{
parent::preUp($schema);
$query = "SELECT id, user_id FROM company";
$data = $this->connection->prepare($query);
$data->execute();
foreach ($data as $row) {
$userId = $row['id'];
$companyId = $row['user_id'];
$this->customSQL[] = "($userId, $companyId)";
}
}
public function up(Schema $schema)
{
//Change the schema
}
public function postUp(Schema $schema)
{
parent::postUp($schema);
$SQL = 'INSERT INTO company_rep (user_id, company_id) VALUES ' . implode(', ', $this->customSQL);
$this->connection->executeQuery($SQL);
}
答案 1 :(得分:0)
您必须使用DoctrineMigrationBundle来执行此操作。看一下文档here,你应该放弃它。