Как расширить функциональность сущности, которую нельзя изменить? - PullRequest
0 голосов
/ 25 января 2019

Я работаю с Symfony 3.3 и хочу добавить в класс функцию, реализующую Entity:

/**
 * 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'

Что я могу сделать, если Я не могу редактировать аннотации или любое содержимое суперкласса (потому что это библиотека) и учитывая, что Я на самом деле не пытаюсь реализовать Наследование модели , только добавление функции в класс, реализующий сущность.

Спасибо за внимание и помощь.

1 Ответ

0 голосов
/ 25 января 2019

Аннотация должна быть скопирована в расширенный класс:

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();
    }
}
...