Kohana (KO3) универсальная сводная таблица ORM (поля: модель1, модель1_ид, модель2, модель2_ид) - возможно - PullRequest
1 голос
/ 15 января 2012

У меня есть следующие настройки моделей:

User
   - has_many File (for userpics)

Gallery
   - has_many File (for images)

Page
   - has_one File (for background image)

Объект страницы может совместно использовать объект File с одним или несколькими объектами Gallery для своего фона.А на каком-то этапе позже в приложении может появиться новая модель, такая как

Product
   - has_many File

или аналогичная.

Обратите внимание, что мне нужна модель файла, а не просто хранение путей к фактическим файлам, посколькуФайловая модель может ссылаться, фактически, на несколько файлов в файловой системе

File
   - id
   - path
   - path_poster
   - path_m4v     (HTML5 videos need up to three files for compatibility)
   - path_webm
   - path_ogv
   - width
   - height
   - poster_width
   - poster_height
   - type
   - ... etc....

Итак, существует ли простой способ (без перезаписи всего класса ORM) реализовать отношения, которые бы использовали «универсальную» сводную таблицу сследующие поля:

model_name VARCHAR(8) (or model_type_id TINYINT for speed)
model_id INT
file_id INT
relation_name VARCHAR(8)  (e.g., Page model can have "background" and "logo" relation)
position INT

Причина: я хочу иметь универсальный модуль приложения для проверки «потерянных» файлов, а также иметь возможность определить, к какому файлу прикреплен каждый файл, например,при удалении файла из галереи приложение предупреждает, что файл все еще прикреплен к странице в качестве фона.

1 Ответ

0 голосов
/ 01 марта 2012

Короткий ответ - нет.Причина в том, что model_id будет конфликтовать с другими идентификаторами модели.Если бы вы хотели, вы могли бы сделать уникальный индекс для имя_модели + модель_идентификатора, но для объединения этих двух столбцов потребуется переписать методы ORM, чтобы объединить модели через их отношения.таблицы.

...