Dan*_*Dan 4 sql polymorphic-associations
我正在尝试实现类似于Ruby on Rails的多态关系的功能。我有以下三个表:
活动用户组织
事件可以是用户或组织的所有者,因此我的“事件”表包括以下列:owner_type和owner_id。
我可以通过内部连接和where子句轻松列出所有属于用户或组织的事件,但是,有一种方法可以根据owner_type列的值使连接表成为条件,允许将所有事件一起列出,不管owner_type?
我希望这是有道理的。
任何建议表示赞赏。
谢谢。
您不能将连接表设置为条件表,因此在这种情况下,您将必须将事件连接到用户和组织,并使用合并将公共字段(例如名称)合并在一起。
select e.id, coalesce(u.name, o.name) owner_name
from events e
left join users u on e.owner_id = u.id and e.owner_type = 'user'
left join organisations o on e.owner_id = o.id and e.owner_type = 'org'
Run Code Online (Sandbox Code Playgroud)
但是,您可以考虑创建一个所有者表,该表包含用户和组织,其结构类似于(id,type,org_id,name等)。这仅需要单个连接,但是可能会使架构的其他区域复杂化,例如。组织的用户成员资格。
另一种方法是将用户和组织表联合在一起,然后从事件中联接一次。
| 归档时间: |
|
| 查看次数: |
2677 次 |
| 最近记录: |