Kohana(KO3)ORM通用数据透视表(字段:model1、model1\u id、model2、model2\u id)-可能吗?

Kohana(KO3)ORM通用数据透视表(字段:model1、model1\u id、model2、model2\u id)-可能吗?,orm,kohana,kohana-3,kohana-orm,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) 页面对象可以与其背景的一个或多个库对象共享文件对象。后来在某个阶段出现了一种新的模式,比如 Product - has_many File 应用程序中可能会出现类似的内容 请注意,我需要一个文件模型,而不仅仅是存储实

我有以下模型设置:

User
   - has_many File (for userpics)

Gallery
   - has_many File (for images)

Page
   - has_one File (for background image)
页面对象可以与其背景的一个或多个库对象共享文件对象。后来在某个阶段出现了一种新的模式,比如

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

原因是:我想有一个通用的应用程序模块,用于检查孤立文件,并且能够识别每个文件的附件,例如,从图库中删除文件时,应用程序会警告该文件仍作为背景附加到页面。

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


老实说,我会坚持使用简单的数据透视表。

谢谢你的回答。我想这是真的——如果不重写ORM类,这是不可能的。我想知道,保持一堆当前实现的透视表是否更好,或者拥有一个元数据类型的透视表是否更快。最初的想法是速度会慢一些,因为有多个查询同时命中同一个表。在CMS的受保护区域,我不会太在意速度,为了舒适起见,我会使用ORM,但在公共区域,我无论如何都会使用优化查询。。