【问题标题】:Kohana (KO3) ORM universal pivot table (fields: model1, model1_id, model2, model2_id) — possible?Kohana (KO3) ORM 通用数据透视表(字段:model1、model1_id、model2、model2_id)——可能吗?
【发布时间】:2012-01-15 12:45:59
【问题描述】:

我有以下模型设置:

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

或类似的可以出现在应用程序中。

请注意,我需要一个 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 模块来检查“孤立”文件,并且还能够告诉每个文件附加了什么,因此,例如,当从图库中删除文件时,应用程序会警告该文件仍作为背景附加到页面。

【问题讨论】:

    标签: orm kohana kohana-3 kohana-orm


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回答。我想这是真的——不重写 ORM 类是不可能的。
    • 我很想知道是保留一堆当前实现的数据透视表更好,还是拥有一个元数据类型的数据透视表更快。最初的想法是它会更慢,因为您有多个查询同时访问同一个表。
    • 老实说,我认为这取决于。在 CMS 的受保护区域中,我不太关心速度,并且会为了舒适而使用 ORM,但在公共区域中,我无论如何都会使用优化查询..
    猜你喜欢
    • 2011-02-06
    • 1970-01-01
    • 1970-01-01
    • 2010-12-29
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-07
    相关资源
    最近更新 更多