使用具有多个数据库连接的学说的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。
如何让此查询使用正确的连接?
或者是否有其他方法来构建此列表?
答案 0 :(得分:1)
$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'实例,而不仅仅是字符串名称。