预加载模型架构

时间:2018-10-05 05:22:15

标签: elixir phoenix-framework ecto

因此,我在下面列出了架构及其关联。

用户

  • has_one avatar
  • has_many posts
  • has_many comments

头像

  • belongs_to user

发布

  • belongs_to user
  • has_many comments

评论

  • belongs_to user
  • belongs_to post

我的问题是我想加入我的帖子-> 评论-> 用户-> 头像 >在查询中。

def get_post_comments!(id) do
query =
  from(
    p in Post,
    where: p.id == ^id,
    select: p,
    join: c in assoc(p, :comments),
    join: l in assoc(c, :user),
    join: d in assoc(l, :avatar),
    preload: [comments: {c, user: l, avatar: d}]
  )

IO.inspect(Repo.one!(query))end

我遇到

错误
  预加载中的

(Ecto.QueryError)字段BazaarApp.Market.Comment.avatar不是查询中的关联:

1 个答案:

答案 0 :(得分:0)

修复了笨拙的错误,忘记添加括号。

来自

preload: [comments: {c, user: l, avatar: d}]

收件人

preload: [comments: {c, [user: {l, avatar: d}] }]