【问题标题】:CollectionType add action for database flushCollectionType 为数据库刷新添加操作
【发布时间】:2018-12-11 20:36:37
【问题描述】:

我创建了CollectionType 表单,它可以将无限数量的TicketTime 实体添加到一个Ticket 实体中。它通过OneToMany 关系通过数据库连接。

我要做的是一次将一个Ticket 和多个TicketTimes 添加到数据库中。例如,1 个Ticket 和3 个TicketTimes。

我想知道如何制作这个方法,所以我可以将一个Ticket & 多个TicketTimes 刷新到数据库中。

我的控制器操作:

    public function createTicket(Request $request)
    {
        if ($this->get('security.authorization_checker')->isGranted('IS_AUTHENTICATED_FULLY')) {
            if ($this->getUser()->getrole() == 3) {
                $em = $this->getDoctrine()->getManager();
                $ticket = new Ticket();
                $timeArray = new ArrayCollection();

                $form = $this->createForm(TicketType::class, $ticket);

                $form->handleRequest($request);

                if ($form->isSubmitted() && $form->isValid()) {
                    foreach ($timeArray as $time) {
                        $time->setTicket($ticket);
                        $em->persist($time);
                    }
                    $ticket->setTaken(0);

                    $em->persist($ticket);
                    $em->flush();

                    return $this->redirectToRoute('main');
                }
                return $this->render(
                    'create_ticket.html.twig',
                    array('form' => $form->createView())
                );
            }
        }
        return $this->redirectToRoute('main');
    }

票实体:

/**
 * @Assert\NotBlank()
 * @ORM\OneToMany(targetEntity="TicketTime", mappedBy="ticket", fetch="EXTRA_LAZY", orphanRemoval=true, cascade={"persist"})
 */
private $ticketTimes;
public function setTicketTimes($time): void
{
    $this->ticketTimes = $time;
}
/**
 * @return ArrayCollection|TicketTime[]
 */
public function getTicketTimes()
{
    return $this->ticketTimes;
}

TicketTime 实体:

/**
 * @ORM\ManyToOne(targetEntity="Ticket", inversedBy="time")
 * @ORM\JoinColumn(nullable=false)
 */
private $ticket;

public function getTicket()
{
    return $this->ticket;
}

public function setTicket($ticket): void
{
    $this->ticket = $ticket;
}

【问题讨论】:

  • 1. $timeArray 似乎无论如何都没有被填充,所以它将是空的。 2.您的帖子不包含问题。您希望我们在哪些方面为您提供帮助?
  • @iiirxs 如何填充它,以便它获取 CollectionType 的值?我想知道如何实现这个 add 方法,以便从一个表单中获取一个 Ticket 和多个 TicketTimes

标签: php symfony doctrine symfony4


【解决方案1】:

我自己解决了:)

出了什么问题: 我需要在 Ticket 实体中创建 add 方法,这样我就可以添加任意数量的 TicketTime,这是我添加到 Ticket 实体中的代码:

public function addTicketTime(TicketTime $time)
{
    $this->ticketTimes[] = $time;
    $time->setTicket($this);
    return $this;
}

我还在 Controller 中添加了一些行

........
if ($form->isSubmitted() && $form->isValid()) {
    $ticketTimes = $form->get('ticketTimes')->getData();

    foreach ($ticketTimes as $time) {
        $ticket->addTicketTime($time);
    }
.......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-14
    • 1970-01-01
    • 1970-01-01
    • 2012-05-12
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多