gpt4 book ai didi

elixir - Ecto - 如何通过特定查询获取 `has_many`

转载 作者:行者123 更新时间:2023-12-05 07:47:33 26 4
gpt4 key购买 nike

我有一个带有 has_many 关联的 ecto 模型。我想默认定义与某些查询的关联。

喜欢

defmodule MyApp.User do
use MyApp.Web, :model

schema "users" do
has_many :comments, MyApp.Comment
end
end

我想获取未删除 的评论(删除是 MyApp.Comment 架构的 bool 字段,它应该等于 false)。实现它的方法是什么?

我的尝试#1

我试过

has_many :comments, Ecto.Query.from(c in MyApp.Comment, where: v.deleted == false)

但是我得到了

(ArgumentError) association queryable must be a schema or {source, schema}, got: #Ecto.Query

最佳答案

如果你有PostComment模型,你可以借助Ecto.Query找到未删除的评论,然后Ecto.Repo.

query = from c in Comment,
where c.deleted == false,
select: c

comments = MyApp.Repo.all(query) # This will give you all the non-deleted comments

此外,您可能希望在您的应用程序中进行以下查询。

alias MyApp.{Post,Comment}

query = from p in Post,
join: c in assoc(p, :comments),
where: c.deleted == false,
select: {p, c} # for comments only - just select: c.

Blog.Repo.all(query)

关于elixir - Ecto - 如何通过特定查询获取 `has_many`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39621391/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com