gpt4 book ai didi

elixir - 如何使用 join 编写 ecto 查询

转载 作者:行者123 更新时间:2023-12-01 07:53:37 24 4
gpt4 key购买 nike

我有三个型号User , Group , UserMembership .

他们之间的关系是

defmodule Samajika.Group do
has_many :user_memberships, MyApp.UserMembership
has_many :users, through: [:user_memberships, :user]
end
UserMembership型号有 type存储成员资格类型的列。例如,它可能存储 owner , tenant等等。

现在我想查询 Group并让其成员只是租户。
Ecto.assoc(group, :users) |> Repo.all

以上给了我所有用户。查询看起来像这样
#Ecto.Query<from u0 in Samajika.User, join: u1 in Samajika.UserMembership,
on: u1.group_id in ^[1], where: u0.id == u1.user_id, distinct: true>

我想使用 Ecto 查询组合添加带有 type 的 where 子句在 user_memberships table 。

我已在我的组中添加了此代码
def tenant(query) do
from c in query, where: c.type == "tenant"
end

我这样做
Ecto.assoc(group, :users) |> Group.tenant

然而这增加了 where关于 users 的条款表,而不是连接表 user_memberships
我应该在我的 tenant 中修改什么函数在连接表上添加条件?

最佳答案

将列表传递给 infrom称呼:

def tenant(query) do
from [_u, c] in query, where: c.type == "tenant"
end

第一个参数是主表,第二个参数是第一个连接。

关于elixir - 如何使用 join 编写 ecto 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36925981/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com