2016-03-13 2 views
1

Я использую Symfony 2.8.3. с Doctrine ORM 2.4.8. Я использую YAML для определения моей базы данных.как я могу заставить Doctrine или Symfony генерировать оператор `extends`

У меня есть отображенный суперкласс так:

AppBundle\Entity\Location: 
     type: mappedSuperclass 
     fields: 
      street: 
       type: string 
       length: '100' 

Я получаю от этого суперкласса, как так:

AppBundle\Entity\Building: 
     type: entity 
     extends: AppBundle\Entity\Location 
     id: 
      id: 
       type: integer 
       id: true 
       generator: 
        strategy: AUTO 

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

С app/console doctrine:generate:entities AppBundle это дает мне ожидаемые файлы PHP. Затем с app/console doctrine:schema:update --force я получаю таблицы базы данных building, как и ожидалось, но он имеет только столбец id и колонку street.

Только после того, как я меняю Building.php от

class Building 

в

class Building extends Location 

и перезапуску app/console doctrine:schema:update --force я получаю street столбец в таблице building.

Я ожидал доктрины (или Symfony), чтобы сгенерировать этот оператор extends для меня, потому что я указал extends в источнике YAML.

Что я делаю неправильно?

Или, как я могу получить Doctrine или Symfony для создания заявления extends?

ответ

2

Короткий ответ на этот вопрос: ORM доктрины Doctrine (и по расширению пакета Symfony) не будет генерировать оператор extends для вас, это то, что вам нужно будет добавить и сохранить вручную. Причиной этого является primarilly, потому что Doctrine ORM как проект не хочет поддерживать создание ad-hoc-кода. Взгляните на this GitHub issues thread о поддержке PSR-4 в Доктрине, чтобы получить представление о позиции исполнителя проекта.

Объекты, которые генерирует Doctrine для вас: бизнес-объекты вашего проекта, поэтому вы должны взять на себя ответственность за их поддержание, в этом случае обеспечить соблюдение иерархии классов.

Кроме того, нет ничего, что помешало бы вам продлить/создать свой собственный генератор кода в дополнение к отображениям Doctrine, которые поддерживают ваш прецедент.

+0

Спасибо. Это не я тогда :) –

Смежные вопросы