Elixir EXTO:在多对多查询中包含联接模式字段

Elixir EXTO:在多对多查询中包含联接模式字段,elixir,ecto,Elixir,Ecto,我与一个显式连接模式有一个多对多的关联,该模式在两端引用相同的模型(有点像经典的Follower(是用户)Followee(是用户)东西) 如果我查询某个用户的追随者,我希望包括该用户跟随该用户的时间。这些数据显然位于连接模式上(我们称之为订阅) 如果我只是想要追随者,我会这样做: followers = User |> Repo.get!(user_id) |> assoc(:followers) |> Repo.all() 要使其正常工作,我应该在用户上定义: many_

我与一个显式连接模式有一个多对多的关联,该模式在两端引用相同的模型(有点像经典的Follower(是用户)Followee(是用户)东西)

如果我查询某个用户的追随者,我希望包括该用户跟随该用户的时间。这些数据显然位于连接模式上(我们称之为订阅)

如果我只是想要追随者,我会这样做:

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!:)