有两个实体User和Company。公司有user_id。
现在表格结构发生了变化,接下来一个用户可以代表许多公司,反之亦然(多对多,例如一对多-多对一)。这在中间引入了带有字段user_id、company_id和role的CompanyRepresentative实体。随着这一变化,Companies user_id将被删除。
如何针对这种情况编写数据迁移脚本?对于当前存在的每个公司,必须有连接同一用户和当前连接的公司的CompanyRepresentative条目。
环境为symfony 4应用程序,带有Doctrine和Mysql。
发布于 2018-03-09 17:54:05
主义迁移有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);
}发布于 2018-03-08 00:06:35
您必须使用DoctrineMigrationBundle来完成此操作。看看文档here,你应该不会受到影响。
https://stackoverflow.com/questions/49155980
复制相似问题