带有两个Entitymanager的条令查看错误的数据库



在条令中,我确实遵循了建立第二个连接和第二个实体管理器的规则。";默认";数据库被称为CCD_ 1;源";数据库CCD_ 2。

什么有效

当我在postUp()方法中使用以下代码干运行迁移时:

/** @var EntityManager $em */
$em = $this->container->get('doctrine.orm.entity_manager');
/** @var EntityManager $emSrc */
$emSrc = $this->container->get('doctrine.orm.source_entity_manager');
var_dump($emSrc->getConnection()->getDatabase());
$dates = $emSrc->getRepository('App:Dates')->findAll();

奇怪的是,我把数据库reveesrc正确地写入了我们的!这意味着从连接到实体管理器的映射工作得很好。

什么不起作用

但是,下一行会产生错误。

Base table or view not found: 1146 Table 'revee.dates' doesn't exist"

由于dates是在第二个源实体管理器附带的实体文件夹中定义的,我认为条令应该知道在哪里查找表。我必须做些什么才能将实体映射到其他源数据库?

doctrine.yaml

parameters:
# Adds a fallback DATABASE_URL if the env var is not set.
# This allows you to run cache:warmup even if your
# environment variables are not available yet.
# You should not need to change this value.
env(DATABASE_URL): ''
doctrine:
dbal:
# configure these for your database server
default_connection: default
connections:
default:
url: '%env(resolve:DATABASE_URL)%'
driver: 'pdo_mysql'
server_version: '5.7'
charset: utf8mb4
default_table_options:
charset: utf8mb4
collate: utf8mb4_unicode_ci
source:
url: '%env(resolve:DATABASE_URL_SOURCE)%'
driver: 'pdo_mysql'
server_version: '5.7'
charset: utf8mb4
default_table_options:
charset: utf8mb4
collate: utf8mb4_unicode_ci
orm:
default_entity_manager: default
auto_generate_proxy_classes: true
entity_managers:
default:
naming_strategy: doctrine.orm.naming_strategy.underscore
auto_mapping: true
connection: default
mappings:
App:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/Entity'
prefix: 'AppEntity'
alias: App
source:
naming_strategy: doctrine.orm.naming_strategy.underscore
connection: source
mappings:
App:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/EntitySrc'
prefix: 'AppEntitySrc'
alias: App

src\Entity\Dates.php(第一行(

<?php
namespace AppEntitySrc;
use DoctrineORMMapping as ORM;
/**
* @ORMEntity(repositoryClass="AppRepositoryDateSrcRepository")
*/
class Dates
{
/**
* @ORMId()
* @ORMGeneratedValue()
* @ORMColumn(type="integer")

src\Repository\DateSrcRepository.php

<?php
namespace AppRepository;
use AppEntitySrcDates;
use DoctrineBundleDoctrineBundleRepositoryServiceEntityRepository;
use SymfonyBridgeDoctrineRegistryInterface;
class DateSrcRepository extends ServiceEntityRepository
{
public function __construct(RegistryInterface $registry)
{
parent::__construct($registry, Dates::class);
}

如果有人遇到同样的问题,我会通过在实体中明确指定表并在其前面加上数据库来解决。如果有人知道这不是解决问题的正确方法,我会感兴趣的。

<?php
namespace AppEntitySrc;
use DoctrineORMMapping as ORM;
/**
* @ORMEntity(repositoryClass="AppRepositoryDateSrcRepository")
* @ORMTable(name="reveesrc.dates")
*/
class Dates
{

最新更新