2
我有三种型号User
,Group
,UserMembership
。其中如何撰写加入的ecto查询
关系
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>
我想用外生查询组成与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
函数中修改以在连接表上添加条件吗?