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
函數中修改以在連接表上添加條件嗎?