doctrine2 — генерирующие сущности

#php #doctrine-orm

#php #doctrine-orm

Вопрос:

я использую doctrine2 cli для генерации объектов.

у меня есть исходные классы, определенные в PHP с помощью docblock. когда я запускаю doctrine orm:generate-entities, создаются новые файлы — генерируются поля и создаются методы (установщики / получатели).

проблема в том, что я хочу скопировать свои собственные пользовательские методы из исходных файлов (без расширения файлов).

например: у меня есть skel Employee .php с:

 class Employee {
    /** comments */
    public $key;
    public function myCustomMethod(){
        ....
    }
}
  

когда я запускаю orm: generate-entites, models Employee.php создается, но myCustomMethod() не копируется

есть ли способ скопировать пользовательские команды?

Ответ №1:

Сначала создайте свои модели / сущности в коде с помощью сопоставления аннотаций, а затем используйте orm:schema-tool:create для создания схемы вашей базы данных, и если это не выполняется автоматически, orm:generate-proxies .

Смотрите Примечание здесь

Однако, если вы вкладываете в сущности гораздо больше логики, вам следует воздержаться от использования генератора сущностей и закодировать свои сущности вручную.

Комментарии:

1. предполагается ли загрузить прокси-файл? или просто файл сущности? я использую code igniter и загружаю данные с помощью $this->em->find(‘models Employee’, 1);

2. Прокси генерируются Doctrine либо автоматически во время выполнения (типично для разработки), либо вручную. См . doctrine-project.org/docs/orm/2.0/en/reference /. … Прокси-серверы невидимы для вашего приложения (они расширяют ваши сущности), но по сути являются тем, что возвращает диспетчер сущностей / репозиторий

3. дело в том, что я хочу, чтобы объекты создавались автоматически, и мне нужны пользовательские методы для копирования. теперь я вижу, что они скопированы в прокси, но прокси пытается запустить parent::myCustomMethod() (parent= сгенерированный объект). он не содержит метода

4. Почему вы генерируете сущности? В документации об этом довольно ясно сказано