簡體   English   中英

我正在為Symfony 2中以ORM為學說的ManyToMany關系無法正常工作而苦苦掙扎

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM