Я получаю ряд проблем, пытаясь реализовать CTI
Прежде всего я использую пользовательский загрузчик для своих классов сущностей
class My_AutoLoader implements Zend_Loader_Autoloader_Interface
{
public function autoload($class)
{
$class = trim(str_replace('\\', '/', $class), '/');
if (@include(APPLICATION_PATH . '/Entities/' . $class . '.php')) {
return $class;
} else {
throw new Zend_Loader_Exception('Cannot load ' . $class . '.');
}
}
}
Идея состоит в том, чтобы использовать application\Entities
для классов, которые не имеют пространства имен
как $user = new Users();
Тогда я определил наследование классов
Profiles:
type: entity
table: profiles
repositoryClass: Repositories\Base
inheritanceType: JOINED
discriminatorColumn:
name: profiletype
type: integer
length: 11
discriminatorMap:
1: Personal
2: Work
3: Business
id:
id:
type: integer
generator:
strategy: AUTO
fields:
firstname:
type: string
length: 255
fixed: false
nullable: true
...
Work:
type: entity
table: work
repositoryClass: Repositories\Base
fields:
position:
type: string
length: 255
fixed: false
nullable: true
Затем я вручную создал класс Работа для расширения профилей
class Work extends Profiles
{
}
Первая проблема началась с 2.0.0 (2.0.1), когда я использую консольный инструмент generate-entity Я получаю ошибку, что У меня нет идентификаторов для Work
класс , это странно, потому что ИМХО это противоречит идее, что Work
расширяет Profiles
и id
уже определено.
Однако я попытался добавить столбец id
для класса Work
, но затем Я получил сообщение, что у меня уже есть столбец id
. DOH!
Я попытался добавить какое-нибудь другое имя столбца для PK, но на самом деле я получил дополнительный столбец, который не нужен , потому что также создан правильный унаследованный столбец id
. В CTI у меня должен быть один столбец FK, и нет других PK с автоматически сгенерированными значениями.
Итак, я сделал плохую вещь , чтобы взломать классы доктрин и убрать проверки на отсутствие идентификаторов. Ужасно, но это сработало. Сущности начинают генерироваться правильно, и структура БД в порядке.
Позже я обнаружил, что все это странное поведение связано с ошибкой в доктрине 2, и исправлено в 2.0.5.
Ну, я попробовал 2.0.5 и имел точно такую же проблему , поэтому я подумал, что ошибка в моем коде.
Я подал ошибку в jira доктрины и Я получил ответ, что мои определения неверны и мне нужны идентификаторы для подклассов (и получил ссылку на документацию, что все, что мы знаем, довольно плохо, особенно для отображения YAML ). Я сдался и продолжил свой хак.
Позже я попробовал с 2.0.6 и 2.1, но с этими версиями мои сущности больше не обновляются, но каждый раз, когда я использую generate-entity, новые определения классов добавляются в конец, поэтому появляются дубликаты,
Мой вопрос:
Это проблема с доктриной, или я делаю это неправильно?
Если это во мне, каков правильный способ отображения CI