我有两个实体:Tarifa和TarifaPeso(这个实体必须以Tarifa形式出现20次)。
塔里法的关系是:
/**
* @ORM\OneToMany(targetEntity="TarifaPeso", mappedBy="tarifa", cascade={"persist"})
*/
private $pesos;
我已经嵌入了这个表格,因为Symfony2 doc说的一切都没问题,但是我不想这样做,它只需要出现20次。所以Tarifa是一个表格,必须有20个TarifaPeso形式嵌入。
你知道怎么做吗?感谢
答案 0 :(得分:2)
由于您维持@ORM\OneToMany
关联,Collection Field Type应解决您的目的。您只需在生成表单之前将TarifaPeso
的20个实例与Tarifa
实体相关联。
See here如何嵌入集合表单类型。
确保您为自动cascade-persist
或Tarifa
insert
个实体update
实体TarifaPeso
启用了Collection
。
根据我对IT 2000000
HR 2000000
IT 1950000
HR 2200000
Admin 1900000
IT 1900000
IT 2200000
字段类型的体验。在数据完整性方面,这将更快,更容易。
答案 1 :(得分:0)
最后我在父表单类的构造函数中(在实体中)完成了这个:
$this->envios = new \Doctrine\Common\Collections\ArrayCollection();
for ($i = 0; $i < count(self::$KILOS); $i++) {
$peso = new TarifaPeso();
$peso->setKilosMaxlim(self::$KILOS[$i]);
$this->addPeso($peso);
}
有$ KILOS:
private static $KILOS = array(1,2,3,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100,300,500,1000,1001);
通过这种方式,我用这种方式用eventListener修改表单:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('precio', null, array(
'attr' => array('autofocus' => true),
'label' => 'label.precio ' ,
));
;
$builder->addEventListener(FormEvents::POST_SET_DATA, function (FormEvent $event)
{
$form = $event->getForm();
$data = $event->getData();
if ($data) {
$valor = $data->getKilosMaxlim();
$field = $form->get('precio');
$config = $field->getConfig();
$options = $config->getOptions();
$options['label'] = 'Valor para '.$valor; // change the label
$form->add($field->getName(), $config->getType()->getName(), $options);
}
});
}