2017-10-27 21 views
0

안녕하세요. 도와 주려고하는 누군가에게 감사드립니다.나는 작동하지 않는 것에 대해 고민 중이다. Symfony 2에서의 많은 관계 ORM과 같은 교리와

저는 Symfony와 doctrine을 처음 접했고, 왜 내 티켓 엔티티가 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> 
+0

'app/console doctrine : schema : update --force' 명령 다음에 ** inventory_computer_join ** 테이블을 데이터베이스에 저장 했습니까? ** $ ticket ** 변수를 덤프하면 티켓을 계속 유지하기 전에 연결된 컴퓨터가 있습니까? 정확히 당신의 문제는 어디에 있는가 :-) – Mcsky

답변

0

당신이 저장 그것을 시도 ManyToMany합니다;

첫째 : Ticket.php 엔티티에서 protected $computers

변경 protected $commputer;. addComputer() 또는 removeComputer()에서 $ this-> computers를 사용하고 있기 때문입니다.

두 번째 : Computer.php 엔티티에서 * @ORM\ManyToMany(targetEntity="Ticket", mappedBy="computer")에서 mappedBy="computers"까지.

컴퓨터로 티켓을 저장할 수 있습니다. 컨트롤러에서 시도해보십시오. 컨트롤러 : $ ticket = new Ticket(); $ computer = new 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();