У меня 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
Просто добавьте следующий код в свой класс ComCompany
public function getCityName()
{
return $this->cmpCity->getCitName();
}
Оба предоставленных ответа абсолютно правильны. Однако учтите, что если вы используете ленивую загрузку, дополнительный запрос будет запускаться каждый раз, когда вы вызываете getCityName, если вы не используете JOIN в своем DQL/Query Builder.
Это может иметь ужасные проблемы с производительностью, если вы вызываете getCityName в цикле, поэтому я подумал, что стоит упомянуть об этом.
Вам не нужен этот метод getter, пока вы уже имеете его в классе ComCity. Поскольку добавление его (например, ответ на вызов) делает дубликат кода. Вы должны использовать
$company->getCmpCity()->getCitName()
вместо
А также: https://en.wikipedia.org/wiki/Don%27t_repeat_yourself