Je veux sélectionner un seul enregistrement (l'enregistrement complet) où le nom est xxx et la marque est xxx. L'enregistrement sera toujours singulier parce que le nom et la marque sont un index unique:Ecto 'where et where' clause
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
Ce jette:
== 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
Je préfère ce genre de syntaxe:
def getProductByNameAndBrand(name) do
Api.Product |> Ecto.Query.where(name: ^name) |> all
end
Cependant pas sûr si cela peut être fait dans ce style?
Qu'est-ce que je fais mal?
EDIT: À peu près sûr que cela fonctionne de la manière souhaitée, mais affichera ici vérifier encore qu'il n'a pas de bugs:
def getProductByNameAndBrand(name, brand) do
Api.Product |> Ecto.Query.where(name: ^name) |> Ecto.Query.where(brand: ^brand) |> all
end