[英]I'm struggling about a not working ManyToMany relationship in Symfony 2 with doctrine as ORM
嗨,謝謝大家。
我對Symfony和學說還很陌生,我無法弄清楚為什么我的票證實體在沒有ManyToMany Realtionship的情況下被存儲。 我非常努力,做了幾天我發現的一切,但最終我需要幫助。
我們來了
票
<pre>
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use AppBundle\Entity\Computer;
/**
* @ORM\Entity
* @ORM\Table(name="tickets")
*/
class Ticket {
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="integer")
*/
protected $creator;
/**
* @ORM\Column(type="integer")
*/
protected $owner;
/**
* @ORM\ManyToOne(targetEntity="Category", inversedBy="tickets")
* @ORM\JoinColumn(name="category_id", referencedColumnName="id")
*/
private $category;
/**
* @ORM\ManyToOne(targetEntity="Type", inversedBy="tickets")
* @ORM\JoinColumn(name="type_id", referencedColumnName="id")
*/
protected $type;
/**
* @ORM\Column(type="string")
*/
protected $subject;
/**
* @ORM\ManyToMany(targetEntity="Computer", inversedBy="tickets", cascade={"persist"})
* @ORM\JoinTable(name="inventory_computer_join",
* joinColumns={@ORM\JoinColumn(name="ticket_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="computer_id", referencedColumnName="id")}
*)
*/
protected $computer;
[...]
/**
* Add computer
*
* @param \AppBundle\Entity\Computer $computer
*
* @return Ticket
*/
public function addComputer(\AppBundle\Entity\Computer $computer)
{
$this->computers[] = $computer;
return $this;
}
/**
* Remove computer
* @param \AppBundle\Entity\Computer $computer
*/
public function removeComputer(\AppBundle\Entity\Computer $computer)
{
$this->computers->removeElement($computer);
}
/**
* Get computers
* @return \Doctrine\Common\Collections\Collection
*/
public function getComputers()
{
return $this->computers;
}
}
</pre>
電腦
<pre>
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use AppBundle\Entity\Ticket;
/**
* @ORM\Entity
* @ORM\Table(name="inventory_computer")
*/
class Computer
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\ManyToMany(targetEntity="Ticket", mappedBy="computer")
*/
protected $tickets;
[...]
/**
* Add ticket
*
* @param \AppBundle\Entity\Ticket $ticket
*
* @return Computer
*/
public function addTicket(\AppBundle\Entity\Ticket $ticket)
{
$this->tickets[] = $ticket;
return $this;
}
</pre>
控制者
<pre>
/**
* @Route("admint/createTicket", name="AdminTicketErstellen")
*/
public function AdminCreateTicketAction(Request $request) {
$ticket = new Ticket;
$form = $this->createForm(TicketType::class, $ticket, array(
'method' => 'GET'
));
$form->handleRequest($request);
if ($form->isSubmitted()) {
$em = $this->getDoctrine()->getManager();
$em->persist($ticket);
$em->flush();
return $this->redirectToRoute('measure_servers');
}
return $this->render( 'sysadmin/pages/AdminCreateTicket.html.twig', array(
'ticket' => $form->createView(),
)
);
}
</pre>
如果您想存儲ManyToMany,請嘗試;
第一:
更改protected $commputer;
在Ticket.php實體中protected $computers
。 因為,您在addComputer()或removeComputer()處使用$ this-> computers。
第二個: * @ORM\\ManyToMany(targetEntity="Ticket", mappedBy="computer")
到Computer.php實體上的mappedBy="computers"
。
您可以使用計算機存儲票證,可以在控制器上嘗試:$ ticket = new Ticket();。 $ computer =新的Computer();
$ticket->setCreator(4);
$ticket->setOwner(3);
$computer->addTicket($ticket);
$ticket->addComputer($computer);
$em = $this->getDoctrine()->getManager();
$em->persist($computer);
$em->persist($ticket);
$em->flush();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.