Doctrine2 добытчики для ассоциаций

0

У меня 2 класса: Компания:

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;
    }

}

В этих двух таблицах есть ассоциации Company.comCity = City.citId

Как добавить метод getter в класс ComCompany для получения City.citName?

У меня есть foreign keys а Entity создается правильно, но нет метода для получения citName из класса Company

Теги:
doctrine2

3 ответа

2
Лучший ответ

Просто добавьте следующий код в свой класс ComCompany

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

Оба предоставленных ответа абсолютно правильны. Однако учтите, что если вы используете ленивую загрузку, дополнительный запрос будет запускаться каждый раз, когда вы вызываете getCityName, если вы не используете JOIN в своем DQL/Query Builder.

Это может иметь ужасные проблемы с производительностью, если вы вызываете getCityName в цикле, поэтому я подумал, что стоит упомянуть об этом.

1

Вам не нужен этот метод getter, пока вы уже имеете его в классе ComCity. Поскольку добавление его (например, ответ на вызов) делает дубликат кода. Вы должны использовать

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

вместо

А также: https://en.wikipedia.org/wiki/Don%27t_repeat_yourself

Ещё вопросы

Сообщество Overcoder
Наверх
Меню