Проект 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.
Как я могу заставить этот запрос использовать правильное соединение?
Или есть другой способ составить этот список?




$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');
},
])
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, а не только имя строки.