2015-01-10 3 views
0

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

Нормализованный способ справиться с этим будет состоять из нескольких таблиц, каждый из которых имеет только столбцы, необходимые для конкретного типа файла. Таблица root/superclass будет содержать информацию, общую для всех файлов (путь, имя, размер, даты и т. Д.).

Проблема: Помимо «categorizable» файлы, перечисленные выше, всегда будет файлы не будут предоставлять дальнейшие метаданные. Следовательно, все, что нужно зайти в базу данных, это запись в таблице root/superclass.

Прочитав Doctrine 2 Documentation on Class Table Inheritance (CTI), я считаю, Doctrine2 не допустит объекты, которые в дальнейшем не специализированные:

отображенный суперкласс не может быть объектом [..]

Есть ли способ выполнить это? Почему это невозможно?

+0

'http: // stackoverflow.com/ questions/7037882/doctrine-table-class-inheritance-when-one-subclass-has-no-extra-attributes/9750756 # 9750756' утверждает, что можно создать другой подкласс без добавляя любые свойства. После этого Doctrine2 создаст таблицу с одним столбцом: 'id'. – snwflk

ответ

0

В итоге я закончил работу над Доктриной, так как хотел выполнить не только неполную специализацию, но и множественное наследование.

Множественное наследование: Я хотел, чтобы некоторые файлы были обоими, audio_file и video_file.

В сценарии «Доктрина» я предполагаю, что нужно было бы указать каждую возможную комбинацию листьев как класс. Как указано в моем комментарии, даже неспециализированный случай должен был быть классом, отличным от корневого класса.

Итак, что я делаю, это ручные SQL-запросы и сами построение объектов. В принципе, взять часть ORM в этом случае. Это позволяет мне оставаться верным моей исходной схеме базы данных.

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