php 多个数据库/模式的Doctrine迁移(在Symfony项目中)

xzv2uavs  于 2023-06-04  发布在  PHP
关注(0)|答案(1)|浏览(131)

我在Symfony 6项目中配置了两个模式的单个数据连接:

Localhost
 - app
 - common
<doctrine:config>
    <doctrine:dbal dbname="app" url="%env(resolve:DATABASE_URL)%">
</doctrine:dbal>

这两个模式都有一组单独的实体Map。

  • app具有以XML文件编写的Map。这是旧的。
  • common具有使用属性编写的Map。这是新的我试图为它创建第一个SQL表。

我有这样配置的实体管理器:

<doctrine:orm
    default-entity-manager="default"
    auto-generate-proxy-classes="true"
>
    <doctrine:entity-manager
        name="default"
        connection="default"
        naming-strategy="doctrine.orm.naming_strategy.underscore_number_aware"
        auto-mapping="false"
    >
        <doctrine:mapping
            name="App"
            alias="App"
            prefix="App\Entity"
            is-bundle="false"
            type="xml"
            dir="%kernel.project_dir%/config/doctrine"
        />
        <doctrine:mapping
            name="ModelCommon"
            alias="ModelCommon"
            prefix="MyCompany\ModelCommon\Entity"
            is-bundle="false"
            type="attribute"
            dir="%kernel.project_dir%/model/Entity"
        />
    </doctrine:entity-manager>
</doctrine:orm>

所以问题就在这里。以前的项目只有app模式。因此,数据库包含几个已经集成的实体。我想集成另一个只有一个实体的common模式(目前)。我无法为其生成正确的迁移。
这是新实体:

namespace MyCompany\ModelCommon\Entity;

use Doctrine\ORM\Mapping as ORM;

#[ORM\Entity]
#[ORM\Table(name: 'category', schema: 'common')]
class Category
{
    #[ORM\Id]
    #[ORM\GeneratedValue(strategy: 'AUTO')]
    #[ORM\Column(type: 'integer')]
    private ?int $category_id = null;

    #[ORM\Column(type: 'string')]
    private string $category_name;
}

每当我尝试doctrine:migrations:diff或只是doctrine:schema:update --dump-sql时,我都会收到以下信息:

[OK] Nothing to update - your database is already in sync with the current entity metadata.

显然,从实体中删除schema: 'common'会生成正确的查询:

CREATE TABLE category (category_id INT AUTO_INCREMENT [...]

我已经尝试过用多种方法来处理这个问题。比如,创建一个单独的<doctrine:connection ... />或单独的实体管理器(每个模式一个)。两个想法都失败了。即使在DBAL配置中将dbname="app"更改为default_dbname="app"
甚至理想的情况是有两个独立的迁移名称空间,它们不会相互影响。比如,迁移一个模式将只考虑一个名称空间。不过,我在实现这个想法时也遇到了问题。
有没有什么特别的方法来处理这个问题?提前感谢您的任何帮助🙏。

ha5z0ras

ha5z0ras1#

选项列表
bin/console doctrine:migrations:diff -h
按实体管理员名称生成
bin/console doctrine:migrations:diff --env=dev --em=ModelCommon
按连接名称生成
bin/console doctrine:migrations:diff --env=dev --conn=SomeConnection

相关问题