【问题标题】:Doctrine Join tables to get the same ID教义连接表以获得相同的ID
【发布时间】:2016-05-24 18:20:29
【问题描述】:

我是 symfony 的初学者,我必须使用收集表单创建一个网站来预订演出门票。

界面简单,用户选择自己想要的票数,然后显示所需票数的表单原型(姓名和姓氏输入)。这部分很适合我。

每次提交 = 新预订

我在 mysql 中有 2 个表“reservations”和“ticket”,我想在提交表单后得到这个渲染:

订桌:

预订 id = "1"

预订 id = "2"

桌坯:

Billet id="1" name="thomas", surname="good", reservation_id="1"

Billet id="2" name="laura", surname="senior", reservation_id="1"

Billet id="3" name="pierre", surname="martin", reservation_id="2"


问题是我得到了这个结果:

Billet id="1" name="thomas", surname="good", reservation_id="Null"

Billet id="2" name="laura", surname="senior", reservation_id="Null"


这是我的实体:

<?php

namespace Louvre\PagesBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Billet
 *
 * @ORM\Table(name="billet")
 * @ORM\Entity(repositoryClass="Louvre\PagesBundle\Repository\BilletRepository")
 */
class Billet
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\ManyToOne(targetEntity="Reservations", inversedBy="billets")
     * @ORM\JoinColumn(name="reservations_id", referencedColumnName="id")
     */
    protected $reservations;

    /**
     * @var string
     *
     * @ORM\Column(name="prenom", type="string", length=255)
     */
    private $prenom;

    /**
     * @var string
     *
     * @ORM\Column(name="nom", type="string", length=255)
     */
    private $nom;


    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set prenom
     *
     * @param string $prenom
     * @return Billet
     */
    public function setPrenom($prenom)
    {
        $this->prenom = $prenom;

        return $this;
    }

    /**
     * Get prenom
     *
     * @return string 
     */
    public function getPrenom()
    {
        return $this->prenom;
    }

    /**
     * Set nom
     *
     * @param string $nom
     * @return Billet
     */
    public function setNom($nom)
    {
        $this->nom = $nom;

        return $this;
    }

    /**
     * Get nom
     *
     * @return string 
     */
    public function getNom()
    {
        return $this->nom;
    }
}


<?php

namespace Louvre\PagesBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

use Doctrine\Common\Collections\ArrayCollection;

/**
 * Reservations
 *
 * @ORM\Table(name="reservations")
 * @ORM\Entity(repositoryClass="Louvre\PagesBundle\Repository\ReservationsRepository")
 */
class Reservations
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;


    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }


    /**
     * @ORM\OneToMany(targetEntity="Billet", mappedBy="reservations", cascade={"persist","remove"})
     */
    protected $billets;


    public function __construct()
    {
        $this->billets = new ArrayCollection();
    }

    public function getBillets()
    {
        return $this->billets;
    }

    public function setBillets(ArrayCollection $billets)
    {
        $this->billets = $billets;
    }

}

【问题讨论】:

    标签: php mysql symfony doctrine-orm


    【解决方案1】:

    你的命名有点混乱……

    我建议:

    class Billet
    {
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;
    
    /**
     * @ORM\ManyToOne(targetEntity="Reservation", inversedBy="billets")
     * @ORM\JoinColumn(name="reservation_id", referencedColumnName="id")
     */
    protected $reservation;
    
    /**
     * @var string
     *
     * @ORM\Column(name="prenom", type="string", length=255)
     */
    private $prenom;
    
    /**
     * @var string
     *
     * @ORM\Column(name="nom", type="string", length=255)
     */
    private $nom;
    
    
    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }
    
    /**
     * Set prenom
     *
     * @param string $prenom
     * @return Billet
     */
    public function setPrenom($prenom)
    {
        $this->prenom = $prenom;
    
        return $this;
    }
    
    /**
     * Get prenom
     *
     * @return string 
     */
    public function getPrenom()
    {
        return $this->prenom;
    }
    
    /**
     * Set nom
     *
     * @param string $nom
     * @return Billet
     */
    public function setNom($nom)
    {
        $this->nom = $nom;
    
        return $this;
    }
    
    /**
     * Get nom
     *
     * @return string 
     */
    public function getNom()
    {
        return $this->nom;
    }
    
    public function setReservation(Reservation $reservation)
    {
        $this->reservation = $reservation;
    
        return $this;
    }
    
    public function getReservation()
    {
        return $this->reservation;
    }
    }  
    

    Reservation 实体

    /**
     * Reservation
     *
     * @ORM\Table(name="reservations")
     * @ORM\Entity(repositoryClass="Louvre\PagesBundle\Repository\ReservationsRepository")
     */
    class Reservation
    {
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;
    
    
    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }
    
    
    /**
     * @ORM\OneToMany(targetEntity="Billet", mappedBy="reservations", cascade={"persist","remove"})
     */
    protected $billets;
    
    
    public function __construct()
    {
        $this->billets = new ArrayCollection();
    }
    
    public function getBillets()
    {
        return $this->billets;
    }
    
    public function addBillet(Billet $billet)
    {
        if (!$this->billets->contains($billet))
        {
            $this->billets->add($billet);
            $billet->setReservation($this);
        }
    
        return $this;
    }
    
    public function removeBillet(Billet $billet)
    {
        // you can implement for collection
    }
    
    public function setBillets($billets)
    {
        $this->billets = new ArrayCollection();
    
        foreach ($billets as $billet)
        {
            $this->addBillet($billet)
        }
    
        return $this;
    }
    
    }   
    

    【讨论】:

    • “导入我加入的列”是什么意思??
    • 谢谢,我在等你哈哈,我只想导入reservationId = $id的方坯。如果您查看上面的代码,reservationId 是来自 reservationType id 的 billetType 中的连接列。
    • findByReservationId 方法是什么?为什么不使用存储库 find($id)method ?它将使用 Billet 集合检索 Reservation 对象
    • 方法 findBy 是一种学说方法,你只需要指定最后的字段和变量,如:findByFieldRequest($variable);但是我犯了一个错误,我在这里输入了错误的代码是所有代码:-第一个获取预订ID-第二个应该获取附加到预订的方坯。 $em = $this->getDoctrine()->getManager(); $reservation = $em->getRepository('LouvrePagesBundle:Reservation')->findOneById($id); $billets = $em->getRepository('LouvrePagesBundle:Billet')->findOneByReservationId($id);
    • 我猜预订 id $id 是一个参数。因此,获取Reservation 实体的Billet 集合的代码应该是:$billets = $em-&gt;getRepository('LouvrePagesBundle:Reservation')-&gt;find($id)-&gt;getBillets()
    猜你喜欢
    • 2013-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-20
    • 1970-01-01
    相关资源
    最近更新 更多