gpt4 book ai didi

Ecto 'where and where' 子句

转载 作者:行者123 更新时间:2023-12-05 01:44:54 27 4
gpt4 key购买 nike

我想选择名称为xxx,品牌为xxx的单条记录(整条记录)。记录将始终是单数的,因为名称和品牌是唯一索引:

  def getProductByNameAndBrand(name, brand) do
IO.puts("getProductByNameAndBrand")
IO.inspect(name)
IO.inspect(brand)
from p in Api.Product,
where: [name: ^name],
where: [brand: ^brand]
select %{id: p.id, name: p.name, brand: p.brand}
end

这是 throw :

== Compilation error on file lib/api/repo.ex ==
** (CompileError) lib/api/repo.ex:278: undefined function p/0
(stdlib) lists.erl:1338: :lists.foreach/2
(stdlib) erl_eval.erl:670: :erl_eval.do_apply/6

我更喜欢这种语法:

  def getProductByNameAndBrand(name) do
Api.Product |> Ecto.Query.where(name: ^name) |> all
end

但是不确定是否可以用那种风格来完成?

我做错了什么?

编辑:很确定这是按预期方式工作的,但仍将在此处发布以验证它没有错误:

  def getProductByNameAndBrand(name, brand) do
Api.Product |> Ecto.Query.where(name: ^name) |> Ecto.Query.where(brand: ^brand) |> all
end

最佳答案

在第二个 where 之后用查询语法编写的查询中,您错过了逗号。您的其余代码看起来不错。在最新的 Ecto 版本中,如果您想为 where 表达式应用 OR 子句而不是 AND,您还可以使用 or_where

关于Ecto 'where and where' 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44211863/

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