Symfony: загрузка формы EntityType из другой базы данных

Проект Symfony 4.x, использующий доктрину с несколькими подключениями к базе данных. У меня есть Клиенты в одной базе данных и Локации в другой базе данных. У меня есть CustomerForm, который я использую для ввода и редактирования информации о клиенте, включая Местоположение. Мне нужно создать список местоположений в форме в списке выбора, поэтому у меня есть такое определение, как:

<?php

namespace App\Form;

use App\Entity\Lobbytrack\Location;
use App\Repository\Lobbytrack\LocationRepository;
use Doctrine\ORM\EntityRepository;

class CustomerForm extends AbstractType
{
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
         ...

          $builder
            ->add('location', EntityType::class, [
                'label' => 'Location',
                'class' => Location::class,
                'query_builder' => function (EntityRepository $er) {
                    return $er->createQueryBuilder('l')
                        ->where('l.isActive = 1')
                        ->orderBy('l.order',' ASC');
                },
            ])

          ...
}

/**
 * {@inheritdoc}
 */
public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'App\Entity\Customer'
    ));
}

Когда я пытаюсь загрузить форму, выдается ошибка:

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'smc.location' doesn't exist

Таким образом, похоже, что он использует мое соединение с базой данных по умолчанию, а не соединение, которое содержит местоположения, хотя я включил правильный класс Location и Repository.

Как я могу заставить этот запрос использовать правильное соединение?
Или есть другой способ составить этот список?

JS - События опций формы
JS - События опций формы
В продолжение предыдущей статьи CSS - стили, связанные с вводом формы , в этой статье мы будем использовать JS для взаимодействия с формами, на этот...
CSS - Стили, связанные с вводом формы
CSS - Стили, связанные с вводом формы
Общими стилями ввода для форм являются Input (включая Text, Radio, checkbox), Select и Textarea, из которых Input относительно прост, поэтому в этой...
Создание многостраничной формы заявления о приеме на работу с помощью Angular
Создание многостраничной формы заявления о приеме на работу с помощью Angular
Наличие на корпоративном сайте форм заявлений о приеме на работу, или "трудовых анкет", экономит время и деньги как для соискателей, так и для...
0
0
182
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Укажите параметр em для formBuilder:

          $builder
        ->add('location', EntityType::class, [
            'label' => 'Location',
            'class' => Location::class,
            'em'  => 'custom_1'
            'query_builder' => function (EntityRepository $er) {
                return $er->createQueryBuilder('l')
                    ->where('l.isActive = 1')
                    ->orderBy('l.order',' ASC');
            },
        ])

config / packages / doctrine.yaml:

    dbal:
 #        url: '%env(DATABASE_URL)%'
        default_connection: default
        connections:
            default:
                driver: pdo_pgsql
                driver_class: App\Doctrine\DBAL\Driver\CustomPostgreSQLDriver
                host: '%env(DATABASE_HOST)%' 
                port: '%env(DATABASE_PORT)%' 
                dbname: '%env(DATABASE_NAME)%' 
                user: '%env(DATABASE_USER)%' 
                password: '%env(DATABASE_PASSWORD)%' 
                charset: UTF8
            custom_1:
                driver: pdo_pgsql
                ...

Другой вариант - предоставить экземпляр em, а не только имя строки.

Другие вопросы по теме