选中Symfony2 Insert All复选框

时间:2016-08-11 04:24:58

标签: php symfony checkbox doctrine-orm

我有三个班级,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,
    ));
}

}

0 个答案:

没有答案