CollectionType 为数据库刷新添加操作
CollectionType add action for database flush
我创建了 CollectionType
表单,它可以将无限数量的 TicketTime
个实体添加到一个 Ticket
个实体中。它通过 OneToMany
关系通过数据库连接。
我想做的是一次向数据库添加一个 Ticket
和多个 TicketTime
。例如,一个Ticket
和3个TicketTime
s.
我想知道如何制作这个方法,所以我可以取一个 Ticket
和多个 TicketTime
并将它们刷新到数据库中。
我的控制器操作:
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;
}
我自己修好了:)
出了什么问题:
我需要在 Ticket 实体中创建 add 方法,这样我就可以添加任意数量的 TicketTime,这是我添加到 Ticket 实体中的代码:
public function addTicketTime(TicketTime $time)
{
$this->ticketTimes[] = $time;
$time->setTicket($this);
return $this;
}
我还在控制器中添加了一些行
........
if ($form->isSubmitted() && $form->isValid()) {
$ticketTimes = $form->get('ticketTimes')->getData();
foreach ($ticketTimes as $time) {
$ticket->addTicketTime($time);
}
.......
我创建了 CollectionType
表单,它可以将无限数量的 TicketTime
个实体添加到一个 Ticket
个实体中。它通过 OneToMany
关系通过数据库连接。
我想做的是一次向数据库添加一个 Ticket
和多个 TicketTime
。例如,一个Ticket
和3个TicketTime
s.
我想知道如何制作这个方法,所以我可以取一个 Ticket
和多个 TicketTime
并将它们刷新到数据库中。
我的控制器操作:
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;
}
我自己修好了:)
出了什么问题: 我需要在 Ticket 实体中创建 add 方法,这样我就可以添加任意数量的 TicketTime,这是我添加到 Ticket 实体中的代码:
public function addTicketTime(TicketTime $time)
{
$this->ticketTimes[] = $time;
$time->setTicket($this);
return $this;
}
我还在控制器中添加了一些行
........
if ($form->isSubmitted() && $form->isValid()) {
$ticketTimes = $form->get('ticketTimes')->getData();
foreach ($ticketTimes as $time) {
$ticket->addTicketTime($time);
}
.......