您的建議使用自定義查詢是完全正確的。要在自定義查詢範圍內使用對象,您必須使用使用聲明。例如: -
$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
));
}
));