我有三个模型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
表上添加user_memberships
的where子句。
我已将此代码添加到我的论坛
def tenant(query) do
from c in query, where: c.type == "tenant"
end
我这样做
Ecto.assoc(group, :users) |> Group.tenant
但是这会在where
表上添加users
子句,而不是连接表user_memberships
我应该在tenant
函数中修改什么才能在连接表上添加条件?
答案 0 :(得分:8)
将列表发送到in
来电中的from
:
def tenant(query) do
from [_u, c] in query, where: c.type == "tenant"
end
第一个参数是主表,第二个参数是第一个参数。