查询数据
查询数据库需要两个步骤。首先,我们必须构建查询,然后我们必须通过将查询传递给存储库来对数据库执行该查询。
。如果数据库结果中有一个记录,则Ecto.Repo.one
函数将仅返回struct,如果存在多个记录,则错误。让我们从我们的任务表中获取一个记录开始。
要从模式中获取所有记录,ECTO提供了all
函数:
Taskers.Tasks |> Taskers.Repo.all
要根据其 id 获取记录,您使用get
函数:
Taskers.Tasks |> Taskers.Repo.get(1)
#=> %Taskers.Tasks{__meta__: #Ecto.Schema.Metadata<:loaded, "tasks">, id: 1, title: "Hello World", ...}
如果我们想根据id
属性以外的其他内容获得记录,我们可以使用get_by
:
Taskers.Tasks |> Taskers.Repo.get_by(title: "Hello World")
#=> %Taskers.Tasks{__meta__: #Ecto.Schema.Metadata<:loaded, "tasks">, id: 1, title: "Hello World", ...}
如果我们想获得匹配特定属性的多个记录,我们可以使用where
:
Taskers.Tasks |> Ecto.Query.where(title: "Hello World") |> Taskers.Repo.all
注意:使用ecto查询语法要注意的一件事是,它们需要使用引脚操作员(^)来固定变量。 PIN操作员指示查询构建器使用参数化的SQL查询来防止SQL注入。
title = "Hello World"
Taskers.Tasks |> Ecto.Query.where(title: ^title) |> Taskers.Repo.all
可以通过在现有查询上调用Ecto.Query函数来构建查询。