Elixir EXTO:在多对多查询中包含联接模式字段
我与一个显式连接模式有一个多对多的关联,该模式在两端引用相同的模型(有点像经典的Follower(是用户)Followee(是用户)东西) 如果我查询某个用户的追随者,我希望包括该用户跟随该用户的时间。这些数据显然位于连接模式上(我们称之为订阅) 如果我只是想要追随者,我会这样做:Elixir EXTO:在多对多查询中包含联接模式字段,elixir,ecto,Elixir,Ecto,我与一个显式连接模式有一个多对多的关联,该模式在两端引用相同的模型(有点像经典的Follower(是用户)Followee(是用户)东西) 如果我查询某个用户的追随者,我希望包括该用户跟随该用户的时间。这些数据显然位于连接模式上(我们称之为订阅) 如果我只是想要追随者,我会这样做: followers = User |> Repo.get!(user_id) |> assoc(:followers) |> Repo.all() 要使其正常工作,我应该在用户上定义: many_
followers = User
|> Repo.get!(user_id)
|> assoc(:followers)
|> Repo.all()
要使其正常工作,我应该在用户上定义:
many_to_many(
:followers,
MyApp.User,
join_through: MyApp.Subscription,
join_keys: [followee_id: :id, follower_id: :id]
)
因此,假设在
订阅
模型上有一个在
处创建的字段。如何查询以获取它?由于您已经有了订阅
架构,您可以定义一个有许多
:
schema "users" do
...
has_many :follower_subscriptions, MyApp.Subscription, foreign_key: :followee_id
has_many :followee_subscriptions, MyApp.Subscription, foreign_key: :follower_id
end
然后使用以下方法获取订阅:
follower_subscriptions = User
|> Repo.get!(user_id)
|> Repo.preload(follower_subscriptions: :follower)
|> Repo.all()
followee\u订阅
将是订阅
的列表,每个订阅都包含在创建的、followee
、followee\u id
和followee\u id
代码未经测试;如果有输入错误,请告诉我。我已经有了,但我认为有可能得到一个追随者列表,在本例中是这样的。我之所以希望如此,是因为订阅列表打破了phoenix的render\u many
。无论如何,我又尝试了一次,发现它从模式名推断出键,而模式名显然不匹配,因为它是“FollowerView”。但有一种方法可以明确定义它。所以问题解决了,thx!:)