Elixir 如何使用join组合EXTO查询
我有三种型号Elixir 如何使用join组合EXTO查询,elixir,ecto,Elixir,Ecto,我有三种型号User,Group,UserMembership 它们之间的关系是密切的 defmodule Samajika.Group do has_many :user_memberships, MyApp.UserMembership has_many :users, through: [:user_memberships, :user] end UserMembership模型有一个type列,用于存储成员资格的类型。例如,它可能存储所有者,租户等 现在我想查询组,并获取其成员
User
,Group
,UserMembership
它们之间的关系是密切的
defmodule Samajika.Group do
has_many :user_memberships, MyApp.UserMembership
has_many :users, through: [:user_memberships, :user]
end
UserMembership
模型有一个type
列,用于存储成员资格的类型。例如,它可能存储所有者
,租户
等
现在我想查询组
,并获取其成员,这些成员只是租户
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.assoc(group, :users) |> Group.tenant
但是,这会在users
表中添加where
子句,而不是join表user\u成员身份
我应该在我的
tenant
函数中修改什么以在联接表中添加条件?在from
调用中向中的传递列表:
def tenant(query) do
from [_u, c] in query, where: c.type == "tenant"
end
第一个参数是主表,第二个参数是第一个联接
def tenant(query) do
from [_u, c] in query, where: c.type == "tenant"
end