postgresql - 在多态模式中加入关联
问题描述
我现在面临的问题是处理多态模式中的关联。
假设我有这样一个问题要解决:
- 我有多个组织。
- 每个组织都必须有自己的用户表。
- 每个组织都必须有自己的事件表。
- 用户有很多事件 // 事件属于用户。
我认为它应该工作的方式是,一旦创建了组织,就会启动数据库上的触发器,并为该组织创建用户和事件表。用户和事件表是使用某种逻辑生成的名称创建的,因此它们很容易引用。从 Elixir 的角度来看,有一种用于事件的多态模式和一种用于用户的多态模式。
在查询中引用用户和事件表,对于单独的实体,非常容易,看起来或多或少类似于下面。
(from user in {table_name, User}, as: :user)
...
(from event in {table_name, Event}, as: :event)
用户模式本身是一个多态模式,事件模式也是。通常,如果没有多态表,连接会很简单。
对我来说,问题是是否可以在多态用户模式中引用具有has_many
关联的多态事件模式?它是“开箱即用”处理的吗?它只需要引用事件模式,例如:has_many :events, Event, on_delete: :delete_all
并且我可以在查询中使用联接而不会有任何麻烦?
如果有人可以向我解释它是如何处理的,我将非常感激:)
解决方案
{"users_1", User}|> join(:left, [u], e in {"events_1", Event}) |> preload([u, e], events: e) |> Repo.all
您可以用元组({table_name,schema_atom})替换模式原子(例如用户)
推荐阅读
- javascript - package.json 中的“主页”属性放置
- node.js - 修复 Checkmarx XSS 漏洞 exprees js
- node.js - 如何导入 redux compose 以捆绑 nodejs API 中的所有中间件
- reactjs - 反应应用程序正在为一个文本输入返回/打印数据,但不为另一个。我使用了完全相同的代码块,但似乎没有任何效果
- twitter - 如何查找特定日期的 Twitter 数据或推文?
- python - 终止多处理池中的所有进程
- server - 如何移植到 Windows 沙盒?
- javascript - 在 TypeScript 中将一个对象转换为另一个对象
- swift - Swift,Xcode:如何在构建期间将随机文件复制到应用程序的根目录
- scala - Akka-http:非法 URI 引用:无效输入“:”