2017-05-27 48 views
0

我想選擇一個記錄(整個記錄),其中名稱是xxx,品牌是xxx。該記錄將永遠是奇異的,因爲名稱和品牌是唯一索引:Ecto'Where and Where'子句

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 

回答

3

在您的查詢的書面查詢語法之後第二where,你錯過了逗號。其餘的代碼看起來很好。 在最新的Ecto版本中,如果您想爲where表達式應用OR子句而不是AND,則還有or_where