Я пытаюсь создать сущности и схему базы данных с помощью Doctrine под CodeIgniter 2.0, используя аннотации. Я не уверен, правильно ли я это делаю.
Я настроил базовые классы, в которых определены только имя класса и свойства, а затем аннотированы. Я пытаюсь использовать команду generate-entity, чтобы она создала методы get / set.
<?php
namespace Entities;
include('ContentItem.php');
/**
* @Entity
* @Table(name="blobs")
*/
class Blob extends ContentItem {
/**
* @var ContentItemId
*
* @ManyToOne(targetEntity="ContentItem")
* @JoinColumn(name="contentitem_id", referencedColumnName="id")
*/
protected $contentitem;
/**
* @Column(type="string", length=64, nullable=true)
*/
protected $content;
/**
* @Column(name="date_created", type="datetime", nullable=false)
*/
protected $date_created;
/**
* @Column(type="datetime", nullable=false)
*/
protected $date_updated;
}
Этот файл находится в папке с именем «models». Если я запускаю команду 'orm: generate-entity models', то она создает новые классы внутри папки '/ models / Entities'. Это происходит только из-за объявления сущностей пространства имен. Если я запускаю 'orm: schema-tool: create', чтобы попытаться создать схему базы данных, я получаю: "Неустранимая ошибка: невозможно переопределить класс Entities \ Blob в / Users / rw3iss / Sites / ci / application / models / Entities / Blob" .php в строке 11 ".
Это происходит потому, что сгенерированные классы «models / Entities» наследуют пространство имен из файлов, из которых они сгенерированы в родительской папке «models», поэтому возникает конфликт двух классов.
Теперь, если я удалю декларацию пространства имен из родительских файлов и вызову генерировать сущности, передавая «models / Entities» в качестве места назначения, я получу ту же структуру файлов. Кроме того, при попытке использовать модели в моем коде:
$blob = new Entities\Blob;
это выдает ту же ошибку, очевидно, потому что есть еще два класса с одинаковыми именами без пространства имен.
Я объявил загрузчик класса Entities следующим образом:
$entityClassLoader = new \Doctrine\Common\ClassLoader('Entities', APPPATH.'models');
Итак, мой вопрос:
В любом случае можно ли сгенерировать эти классы сущностей из базового класса (в котором мои аннотации объявлены для этого класса и свойств), сохраняя пространства имен, чтобы я по-прежнему мог создавать их экземпляры с помощью 'new Entities \ Blob'? Если бы даже был способ указать сгенерированным классам использовать другое пространство имен из файла, из которого они сгенерированы, это было бы хорошо. Я хотел бы настроить основные свойства, и чтобы команда 'generate entity' создала для меня методы get / set. Кажется, что всякий раз, когда я использую пространства имен, он автоматически создает классы внутри подпапок пространства имен, а затем я получаю ошибку «не может переопределить класс».
Может быть, я делаю что-то в корне неправильно ...
Спасибо за любую помощь!
ОБНОВЛЕНИЕ: Решение:
Возможно, я заработал, положив папку Entities рядом с папкой моих моделей. Если я изменю Entity ClassLoader на «APPPATH», а затем создаю экземпляры моих Entities с помощью «new Entities \ Blob», то это работает.
Кажется, что нет никакой возможности поместить папку Entities в подпапку в папке models без каких-либо жалоб. Если кто-нибудь знает способ сделать это, мне было бы интересно услышать.