Kohana(KO3)ORM通用数据透视表(字段:model1,model1_id,model2,model2_id) - 可能吗?

时间:2012-01-15 12:46:00

标签: orm kohana kohana-3 kohana-orm

我有以下模型设置:

User
   - has_many File (for userpics)

Gallery
   - has_many File (for images)

Page
   - has_one File (for background image)

Page对象可以与一个或多个Gallery对象共享一个File对象作为其背景。在某个阶段后来又出现了像

这样的新模型
Product
   - has_many File

或类似内容可以出现在App。

请注意,我需要一个File模型而不是仅存储实际文件的路径,因为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

原因:我希望有一个通用的App模块来检查“孤立”文件,并且还能够告诉每个文件的附加内容,例如,当从Gallery中删除文件时App会警告该文件仍作为背景附加到页面。

1 个答案:

答案 0 :(得分:0)

简短的回答是否定的。原因是因为model_id会与其他模型ID冲突。如果需要,可以在model_name + model_id上执行唯一索引,但是要连接这两列,需要重写ORM方法以通过关系将模型连接在一起。

我会诚实地坚持使用简单的数据透视表。