我有三个班级,Pedido(id,金额),Subproduto(id,descricao,price),Subpedido(subproduto_id,pedido_id,id,amount)。
首先,我在Pedido上插入数据并获取ID。 其次,我将ID传递给新形式的Subpedido,然后显示所有Subproduto注册的复选框。我希望每个复选框选中相应的一个插入数据库,控制器解释复选框并使循环在db中添加所有多项选择,如下所示:
id <-> pedido_id <-> subproduto_id <-> amount
1 1 4 1
2 1 2 1
3 1 5 1
Subpedido.php
...
/**
* @ORM\ManyToOne(targetEntity="Subproduto", inversedBy="subpedidos")
* @ORM\JoinColumn(name="subproduto_id", referencedColumnName="id")
*/
protected $subproduto;
/**
* @ORM\ManyToOne(targetEntity="Pedido", inversedBy="subpedidos")
* @ORM\JoinColumn(name="pedido_id", referencedColumnName="id")
*/
protected $pedido;
...
---------------------------------------------------------------------
Subproduto.php
....
/**
* @ORM\OneToMany(targetEntity="Subpedido", mappedBy="subproduto")
*/
private $subpedidos;
...
---------------------------------------------------------------------
Pedido.php
....
/**
* @ORM\OneToMany(targetEntity="Subpedido", mappedBy="pedido")
*/
private $subpedidos;
...
当我点击插入时,symfony会返回此内容。
“AppBundle \ Entity \ Subproduto”类型的预期参数, 给出了“Doctrine \ Common \ Collections \ ArrayCollection”
SubpedidoController.php
/**
* Creates a new Subpedido entity, id from pedido.
*
* @Route("/new/{id}", name="subpedido_new")
* @Method({"GET", "POST"})
*/
public function newAction(Request $request, $id)
{
$subpedido = new Subpedido();
$form = $this->createForm('AppBundle\Form\SubpedidoType', $subpedido, array(
'id'=>$id,
));
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($subpedido);
$em->flush();
return $this->redirectToRoute('subpedido_show', array('id' => $subpedido->getId()));
}
return $this->render('subpedido/new.html.twig', array(
'subpedido' => $subpedido,
'form' => $form->createView(),
));
}
SubpedidoType.php
class SubpedidoType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$id = $options['id'];
$builder
->add('subproduto',EntityType::class,
array(
'class'=>'AppBundle:Subproduto',
'label'=>false,
'required'=>true,
'expanded'=>true,
'multiple'=>true,
)
)
->add('Pedido', EntityType::class, array(
'class'=>'AppBundle:Pedido',
'label'=>false,
'choice_label'=>'id',
'query_builder' => function(EntityRepository $er) use ( $id ){
return $er->createQueryBuilder('u') //set repository categoria
->where('u.id = ?1') // compara categoria.id = id passado como parametro
->setParameter(1, $id); // identifica a variavel
}
))
;
}
/**
* @param OptionsResolver $resolver
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AppBundle\Entity\Subpedido',
'id'=>null,
));
}
}