Ecto 'where and where' 子句
Ecto 'where and where' clause
我想select单条记录(整条记录),名称为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
这是投掷:
== 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
但是不确定是否可以用那种风格来完成?
我做错了什么?
编辑:很确定这是按预期方式工作的,但这里 post 仍然会验证它没有错误:
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
。
我想select单条记录(整条记录),名称为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
这是投掷:
== 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
但是不确定是否可以用那种风格来完成?
我做错了什么?
编辑:很确定这是按预期方式工作的,但这里 post 仍然会验证它没有错误:
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
。