【发布时间】:2021-09-08 08:10:07
【问题描述】:
我们在 Ecto 中通过将 deleted_at 列设置为某个日期来使用软删除。
这就是我们的基本架构不是 "public" 的原因,因为默认情况下我们不想查询已删除的记录。
我们的架构只是一个视图,其中仅包含 deleted_at=NULL 的记录。
但是,出于报告目的,我们必须预加载也已删除的记录,我们这样做:
@preload [
tickets: {
from(ticket in Ticket, prefix: "public"),
[
fees: {
from(fee in Fee, prefix: "public"),
[
fee: from(fee1 in Fees.Fee, prefix: "public"),
ticket: from(ticket1 in Ticket, prefix: "public")
]
},
taxes: from(tax in Tax, prefix: "public"),
payments: {from(payment in Payment, prefix: "public"), [:refunds]}
]
}
]
有没有办法以更简单、更简洁的方式从 "public" 架构中查询所有内容?
【问题讨论】:
-
您是否尝试过在 Ecto Schema 模块中使用
@schema_prefix属性,例如@schema_prefix :public -
我有
@schema_prefix :filtered。这就是我的问题的重点。 -
我明白了。您是否尝试过制作第二个模式模块,或多或少地复制第一个,但指定所需的前缀?
-
这毫无意义,因为我有大约 20 个模块要预加载,所以复制会非常痛苦。
-
我唯一能想到的另一件事是编写您自己对
from宏的修改(请参阅Ecto.SubQuery中的defmacro),您可以在其中强制使用前缀选项。所以你可能有一个像from_public这样的宏,但我认为这不会改善你的代码。您的设置有些特殊,您的代码应该有助于传达这一事实。它可能看起来很冗长,但明确设置前缀有助于准确传达每个查询的情况。 YMMV
标签: sql postgresql elixir ecto