カスタム クエリを使用するというあなたの提案は完全に正しかったです。カスタム クエリのスコープ内でオブジェクトを使用するには、useステートメントを使用する必要があります。例えば:
$company = $user->getCompany();
$builder->add('department', 'entity', array(
'class' => 'YourSpecialBundle:Department',
'property' => 'name',
'query_builder' => function(EntityRepository $er) use($company) {
return $er->createQueryBuilder('r')
->where('r.company = :company')
->setParameter("company", $company);
}
));
複数のフィルターを定義する必要がある場合:
$company = $user->getCompany();
$builder->add('department', 'entity', array(
'class' => 'YourSpecialBundle:Department',
'property' => 'name',
'query_builder' => function(EntityRepository $er) use($company) {
return $er->createQueryBuilder('r')
->where('r.company = :company AND r.active = :active')
->setParameter(array(
"company" => $company,
"active" => true
));
}
));