如何在 select 上仅显示由 buildForm 为 ManyToOne 关联生成的特定记录
How to show on the select only specific records when it's generated by buildForm for ManyToOne association
我有这样的实体
class User implements UserInterface
{
// ...
/**
* Many Departments have One Central Department (User)
* @ORM\ManyToOne(targetEntity="User")
*/
private $centralDepartment;
// ...
}
具有自引用关联。在相关的 buildForm
中我使用
class UserType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
// ...
->add('centralDepartment');
// ...
}
}
它在我的视图中创建了 select 列表和用户列表。没错。
但目标是仅在列表中显示具有特定角色的用户。如果 selected 用户具有特定角色,我还想在保存到数据库之前进行验证。
我应该使用 https://symfony.com/doc/3.4/reference/forms/types/choice.html 中的选项 choice_loader 还是在 Symfony 中有更好的选择?我试图首先使用
更改标签
->add('centralDepartment', ChoiceType::class, array('label' => 'Choose Central Department'));
但是我的 select 列表现在是空的。
首先尝试使用 EntityType
而不是 ChoiceType
,后者是用于实体关系的更专业的 ChoiceType。
有了 EntityType
,您有一个 query_builder
选项来 select 想要的选择。
参见:https://symfony.com/doc/current/reference/forms/types/entity.html#query-builder
这也可以通过带有 ChoiceType
的 choice_loader
选项来实现,但需要更多的工作。
根据@Joe 的建议,我使用了 EntityType
->add('centralDepartment', EntityType::class, array(
'class' => 'AppBundle:User',
'query_builder' => function(UserRepository $er) {
return $er->findAllBC(true);
}
));
其中 findAllBC(true)
是我在 UserRepository 中用于 return Query Builder 对象的方法,其中包括供我使用的特定用户:
public function findAllBC($returnQB = false)
{
$qb = $this->createQueryBuilder('u')
->andWhere('u.roles LIKE :role')
->setParameter('role', '%BC%');
if(!$returnQB) return $qb->getQuery()->execute();
else return $qb;
}
我有这样的实体
class User implements UserInterface
{
// ...
/**
* Many Departments have One Central Department (User)
* @ORM\ManyToOne(targetEntity="User")
*/
private $centralDepartment;
// ...
}
具有自引用关联。在相关的 buildForm
中我使用
class UserType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
// ...
->add('centralDepartment');
// ...
}
}
它在我的视图中创建了 select 列表和用户列表。没错。
但目标是仅在列表中显示具有特定角色的用户。如果 selected 用户具有特定角色,我还想在保存到数据库之前进行验证。
我应该使用 https://symfony.com/doc/3.4/reference/forms/types/choice.html 中的选项 choice_loader 还是在 Symfony 中有更好的选择?我试图首先使用
更改标签->add('centralDepartment', ChoiceType::class, array('label' => 'Choose Central Department'));
但是我的 select 列表现在是空的。
首先尝试使用 EntityType
而不是 ChoiceType
,后者是用于实体关系的更专业的 ChoiceType。
有了 EntityType
,您有一个 query_builder
选项来 select 想要的选择。
参见:https://symfony.com/doc/current/reference/forms/types/entity.html#query-builder
这也可以通过带有 ChoiceType
的 choice_loader
选项来实现,但需要更多的工作。
根据@Joe 的建议,我使用了 EntityType
->add('centralDepartment', EntityType::class, array(
'class' => 'AppBundle:User',
'query_builder' => function(UserRepository $er) {
return $er->findAllBC(true);
}
));
其中 findAllBC(true)
是我在 UserRepository 中用于 return Query Builder 对象的方法,其中包括供我使用的特定用户:
public function findAllBC($returnQB = false)
{
$qb = $this->createQueryBuilder('u')
->andWhere('u.roles LIKE :role')
->setParameter('role', '%BC%');
if(!$returnQB) return $qb->getQuery()->execute();
else return $qb;
}