我正在使用Symfony2表单组件来创建和修改表单。我目前正在加载所有模型实体作为选择,但我只需要获取与制造商所选(已发布)值相关的模型。
我怎样才能做到这一点?
class VehicleType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('manufacturer', 'entity', array(
'label' => 'Brand',
'attr' => array('class' => 'input-block-level'),
'class' => 'BalslevCarBundle:Manufacturers',
'property' => 'short_name',
'empty_value' => 'All',
'required' => false
));
$builder->add('model', 'entity', array(
'label' => 'Model',
'class' => 'BalslevCarBundle:Models',
'property' => 'model',
'empty_value' => 'All',
'required' => false
));
}
public function getName()
{
return 'search';
}
}
答案 0 :(得分:0)
首先,您必须根据用户选择“动态”创建您的选择 有两种方法,严格地与您的应用程序行为相结合,导致(在两种情况下)相同的“核心”代码;区别仅在于你的称呼方式。
所以,让我们解释两种可能性:
因此,您问题的 HEART 是:我如何只检索关联的实体?
进入你的VehicleType.php(实体,在这种情况下,是VehicleType?)
private $manufacturerId;
public function __construct($manufacturerId)
{
$this->manufacturerId = $manufacturerId;
}
public function BuildForm(FormBuilderInterface $builder)
{
$manufacturerId = $this->manufacturerId;
$manufacturerQuery = function(EntityRepository $repo) use ($manufacturerId ){
return $repo->createQueryBuilder('m')
->where('m.id = :id')
->setParameter('id',$manufacturerId );};
$builder->add('manufacturer', 'entity', array(
'label' => 'Brand',
'attr' => array('class' => 'input-block-level'),
'class' => 'BalslevCarBundle:Manufacturers',
'property' => 'short_name',
'empty_value' => 'All',
'required' => false,
'query_builder' => $manufacturerQuery;
));
$builder->add('model', 'entity', array(
'label' => 'Brand',
'attr' => array('class' => 'input-block-level'),
'class' => 'BalslevCarBundle:Manufacturers',
'property' => 'short_name',
'empty_value' => 'All',
'required' => false,
'query_builder' => $modelQuery;
));
}
正如您所看到的,通过这种方式,我们使用自定义存储库来仅获取适合我们需求的实体。显然,我在不知道你的数据库结构的情况下编写我的DQL查询:根据你的实际情况调整它是你的任务和责任。
此外,您必须为模型创建另一个查询(在我的答案中称为$modelQuery
),以根据选定的$id