表结构变更时的Doctrine和Mysql数据迁移

Mar*_*ala 0 mysql doctrine symfony mysql-5.7

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

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

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

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

Mar*_*ala 5

教义迁移具有功能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);
}
Run Code Online (Sandbox Code Playgroud)