Ecto'where where where'条款

时间:2017-05-27 00:53:25

标签: elixir ecto elixir-framework

我想选择一个名称为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

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

我做错了什么?

编辑:非常确定这是以理想的方式运行,但会在此处发布,因为它仍在验证它没有错误:

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

1 个答案:

答案 0 :(得分:4)

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