我正在使用Symfony 3.3,并且想向实现实体的类中添加一个函数:
/**
* GeoName
*
* @ORM\Table(name="geo__name" ,indexes={
* @ORM\Index(name="geoname_geoname_search_idx", columns={"name", "country_code"})
* })
* @ORM\Entity(repositoryClass="Bordeux\Bundle\GeoNameBundle\Repository\GeoNameRepository")
*/
class GeoName
{
...
}
所以我扩展了该类并添加了所需的功能。
use ...\GeoName as BaseEntity;
class GeoName extends BaseEntity
{
public function __toString()
{
return $this->getName();
}
}
如果我根本不使用注释,则在使用子类时,系统不会将其识别为实体:
Class "GeoNameBundle\Entity\GeoName" sub class of "Bordeux\Bundle\GeoNameBundle\Entity\GeoName" is not a valid entity or mapped super class.
如果我将子类声明为带有注解@ORM\Entity
的实体,则在使用它时,系统会期望两个表,因为它将扩展名作为类模型继承(未正确定义):
An exception occurred while executing 'SELECT t1.id AS id_2, t1.name AS name_3, ...[MORE FIELDS]... FROM geo__name t1 WHERE t0.id = ?' with params [6362055]:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 't0.id' in 'where clause'
如果我无法编辑注释或超类的任何内容(因为它是一个库),并且考虑到我不是真的在尝试实现,该怎么办?模型继承,仅向实现实体的类添加函数。
感谢您的关注和帮助。
答案 0 :(得分:0)
注释应复制到扩展类:
use ...\GeoName as BaseEntity;
/**
* @ORM\Table(name="geo__name" ,indexes={
* @ORM\Index(name="geoname_geoname_search_idx", columns={"name", "country_code"})
* })
* @ORM\Entity(repositoryClass="Bordeux\Bundle\GeoNameBundle\Repository\GeoNameRepository")
*/
class GeoName extends BaseEntity
{
public function __toString()
{
return $this->getName();
}
}