首页 > 解决方案 > 在多态模式中加入关联

问题描述

我现在面临的问题是处理多态模式中的关联。

假设我有这样一个问题要解决:

我认为它应该工作的方式是,一旦创建了组织,就会启动数据库上的触发器,并为该组织创建用户和事件表。用户和事件表是使用某种逻辑生成的名称创建的,因此它们很容易引用。从 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并且我可以在查询中使用联接而不会有任何麻烦?

如果有人可以向我解释它是如何处理的,我将非常感激:)

标签: postgresqlelixirecto

解决方案


{"users_1", User}|> join(:left, [u], e in {"events_1", Event}) |> preload([u, e], events: e) |> Repo.all

您可以用元组({table_name,schema_atom})替换模式原子(例如用户)


推荐阅读