Symfony-持久多个实体

时间:2018-10-01 09:02:48

标签: php forms api foreach entity

我想通过一个定义的变量保留我的默认实体值。我通过外键连接了一些表,它们已经返回了数据库中的值。由于它们是无法更改的字段,因此只需要在数据库的新行中传递它即可。

 public function ticketAddAction(Request $request, $id)

$ticket = $this->getDoctrine()
        ->getRepository('AppBundle:Tickets')->find($id);

    $form = $this->createFormBuilder()
        ->add('play', EntityType::class, array(
            'disabled'=> true,
            'data' => $ticket->getPlay(),
            'class' => Plays::class,
            'choice_label' => 'playName',
            'attr' => ['class' => 'form-control']
        ))
        ->add('theater', EntityType::class, array(
            'disabled'=> true,
            'data' => $ticket->getTheater(),
            'class' => Theater::class,
            'choice_label' => 'name',
            'attr' => ['class' => 'form-control']
        ))
        ->add('hall', EntityType::class, array(
            'disabled'=> true,
            'data' => $ticket->getHall(),
            'class' => Halls::class,
            'choice_label' => 'hallName',
            'attr' => ['class' => 'form-control']
        ))
->getForm();

    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {

        $data = $form->getData();

        $this->container->get('tickets')->addNewTicket($ticket);

        return $this->redirectToRoute('published');
    }

    return $this->render('@FrontTemplates/pages/ticket.html.twig', array(
        'form' => $form->createView(),
        'purchase' => $ticket,
    ));
}

在此api调用中,一切似乎都工作正常,但在下面的api调用中,我无法弄清楚如何仅使用一个变量来循环通过所有这些对象。

这是我的服务api调用。

 public function addNewTicket(Tickets $ticket)
{
    $newTicket = new Tickets();

    foreach ($ticket as $newTicket) {
             $ticket->setPlay($play);


               $ticket->setTheater($theater);
                 $ticket->setHall($hall);
    }
            return $newTicket 
}

我的实体信息

    /**
 * @ORM\ManyToOne(targetEntity="AppBundle\Base\Entity\Plays")
 * @ORM\JoinColumn(name="play_id", referencedColumnName="id")
 */
private $play;

/**
 * @ORM\ManyToOne(targetEntity="AppBundle\Base\Entity\Theater")
 * @ORM\JoinColumn(name="theater_id", referencedColumnName="id")
 */
private $theater;

/**
 * @ORM\ManyToOne(targetEntity="AppBundle\Base\Entity\Halls")
 * @ORM\JoinColumn(name="hall_id", referencedColumnName="id")
 */
private $hall;

1 个答案:

答案 0 :(得分:0)

首先,您的实体名称应为单数形式,以避免像这样混淆。

在您的第一段代码中,这种形式似乎没有用。您无法使用“ $ data”变量执行任何操作。如果要将该表单链接到票证对象,则应这样调用表单构建器:$ this-> createFormBuilder($ ticket)

在第二段代码中,您尝试遍历单个对象。另外,如果您将表单正确链接到实体,则不需要“ addNewTicket”代码。

另外,请查看官方文档:https://symfony.com/doc/current/forms.html#building-the-form

这是编辑票证的完整代码:

"context": {
"array": "<? entities['spare_part'].![literal] ?>",
"array_size": "<?$array.size() ?>"

如果此代码未保存您的关系,请添加您的映射信息。也许那里有问题。

相关问题