Доктрина с двумя Entitymanagers смотрит на неверную базу данных - PullRequest
0 голосов
/ 04 декабря 2018

Я следовал этим правилам по настройке второго соединения и второго менеджера сущностей в доктрине.База данных «по умолчанию» называется revee, а база данных «источник» reveesrc.

Что работает

Когда я запускаю миграцию в сухом режиме с этим кодом в методе 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 было определено в папке Entity, подключенной ко второму источникуЯ думал, что учение будет знать, где искать стол.Что мне нужно сделать, чтобы сопоставить сущность с другой исходной базой данных?

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: 'App\Entity'
                        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: 'App\EntitySrc'
                        alias: App

src \ Entity \ Dates.php (первые строки)

<?php

namespace App\EntitySrc;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass="App\Repository\DateSrcRepository")
 */
class Dates
{

    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")

src \ Repository \ DateSrcRepository.php

<?php

namespace App\Repository;

use App\EntitySrc\Dates;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Symfony\Bridge\Doctrine\RegistryInterface;

class DateSrcRepository extends ServiceEntityRepository
{
    public function __construct(RegistryInterface $registry)
    {
        parent::__construct($registry, Dates::class);
    }

1 Ответ

0 голосов
/ 04 декабря 2018

Если у кого-то возникла такая же проблема, я исправил ее, явно указав таблицу в сущности, добавив префикс к базе данных.Если кто-нибудь знает, если это не правильный способ его решения, я был бы заинтересован.

<?php

namespace App\Entity\Src;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass="App\Repository\DateSrcRepository")
 * @ORM\Table(name="reveesrc.dates")
 */
class Dates
{
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...