表结构更改期间的Doctrine和Mysql数据迁移

时间:2018-03-07 15:47:05

标签: mysql symfony doctrine mysql-5.7

有实体用户和公司。公司有user_id。

现在表格结构发生变化,下一个用户可以代表许多公司,反之亦然(多对多,例如一对多 - 多对一)。这在中间引入了CompanyRepresentative Entity,其中包含字段user_id,company_id和role。公司user_id将随着这一变化而被删除。

如何针对这种情况制作数据迁移脚本?现在每个公司都必须有一个CompanyRepresentative条目,用于连接目前连接的同一个用户和公司。

环境是使用Doctrine和Mysql的symfony 4应用程序。

2 个答案:

答案 0 :(得分:1)

主义迁移功能preUppostUp。在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,你应该放弃它。