我在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"
。
甚至理想的情况是有两个独立的迁移名称空间,它们不会相互影响。比如,迁移一个模式将只考虑一个名称空间。不过,我在实现这个想法时也遇到了问题。
有没有什么特别的方法来处理这个问题?提前感谢您的任何帮助🙏。
1条答案
按热度按时间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