关于协会的Doctrine2 getters

时间:2014-12-28 10:07:15

标签: php symfony doctrine-orm

我有两节课: 公司:

class ComCompany
{
    /**
     * @var integer
     *
     * @ORM\Column(name="cmp_id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $cmpId;

    /**
     * @var string
     *
     * @ORM\Column(name="cmp_name", type="string", length=100, nullable=true)
     */
    private $cmpName;

    /**
     * @var integer
     *
     * @ORM\Column(name="cmp_code", type="integer", nullable=true)
     */
    private $cmpCode;

     /**
     * @var \Catalog\WebBundle\Entity\ComCity
     *
     * @ORM\ManyToOne(targetEntity="Catalog\WebBundle\Entity\ComCity")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="cmp_city", referencedColumnName="cit_id")
     * })
     */

    private $cmpCity;

    public function getCmpName()
    {
      return $this->cmpName;
    }

    public function getCmpCode()
    {
      return $this->cmpCode;
    }

    public function getCmpCity()
    {
      return $this->cmpCity;
    }

}

和城市

class ComCity
{
    /**
     * @var integer
     *
     * @ORM\Column(name="cit_id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $citId;

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

    public function getCitId()
    {
    return $this->citId;
    }

    public function getCitName()
    {
    return $this->citName;
    }

}

这2个表有关联Company.comCity = City.citId

如何将getter方法添加到ComCompany类以获取City.citName

我有foreign keys并且正确生成了实体,但是citName

没有获取Company的方法

3 个答案:

答案 0 :(得分:2)

只需将以下代码添加到ComCompany

即可
public function getCityName()
{
    return $this->cmpCity->getCitName();
}

答案 1 :(得分:1)

当你已经在ComCity类中使用它时,你不需要这个getter方法。因为添加它(如建议的答案)正在制作重复的代码。你应该使用

$company->getCmpCity()->getCitName() 

代替

还有:https://en.wikipedia.org/wiki/Don%27t_repeat_yourself

答案 2 :(得分:1)

提供的两个答案都是绝对正确的。但是,请注意,如果您使用延迟加载,则每次调用getCityName时都会触发额外的查询,除非您在DQL / Query Builder中使用JOIN。

如果你在一个循环中调用getCityName,这可能会产生严重的性能问题,所以我认为值得一提。