2017-05-27 24 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 

これが投げている:しかし、確か

def getProductByNameAndBrand(name) do 
    Api.Product |> Ecto.Query.where(name: ^name) |> all 
    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 

私は、構文のこの種を好む名、ブランドは、一意のインデックスであるため、レコードは常に単数形になりますもしそれがそのスタイルでできたら?

私は間違っていますか?

EDIT:二where後のクエリ構文で記述されたクエリでは

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

答えて

3

、あなたは逃した:これは、所望のように機能していますが、まだそれが何のバグを持っていないことを検証するとして、ここで掲載しますかなり確信してカンマ。コードの残りの部分は正常に見えます。 最新のEctoバージョンでは、where式にANDの代わりにOR句を適用する場合は、or_whereもあります。