如何使用 Ecto/Phoenix select 来自数据库的最新条目
How to select the latest entry from database with Ecto/Phoenix
我刚开始使用数据库和查询(来自前端),我想 select 来自包含特定 title
的字段的最新条目,比如 Page1
。我知道我有两个领域可以帮助我:
1) created_at
- 我只能订购 select 最新的一个;
2) id
- 我知道每个条目都会生成一个新的 id
所以我可以获得最大的 id
;
我想将其应用于 "standard" 编辑控制器操作:
def edit(conn, %{"id" => id}) do
user = Repo.get(User, id)
changeset = User.update_changeset(user)
render(conn, "edit.html", user: user, changeset: changeset)
end
所以我想知道哪种方法更好,并查看查询示例。
使用 id
字段取决于您的主键是否为整数。目前可能是这样,但会一直这样吗?您可以确定 inserted_at
将始终是一个时间字段 - 所以我会使用它。无论您使用哪种,请务必按降序排列,以便最新的排在最前面。
title = "Page 1"
query = Ecto.Query.from(e in Entry,
where: e.title == ^title,
order_by: [desc: e.inserted_at],
limit: 1)
most_recent = Repo.one(query)
值得注意的是,在 Ecto 中 - 默认情况下插入时间被捕获为 inserted_at
而不是 created_at
- 如果你有 created_field
那么你可以替换 inserted_at
在我的例子中。
也可以使用 Ecto 表达式语法来完成此操作,Ecto.Query.last/2
如下所示:
alias App.Entry
import Ecto.Query
Entry |> where(title: "Page 1") |> last(:inserted_at) |> Repo.one
请参阅 last/2
here 的文档!
我刚开始使用数据库和查询(来自前端),我想 select 来自包含特定 title
的字段的最新条目,比如 Page1
。我知道我有两个领域可以帮助我:
1) created_at
- 我只能订购 select 最新的一个;
2) id
- 我知道每个条目都会生成一个新的 id
所以我可以获得最大的 id
;
我想将其应用于 "standard" 编辑控制器操作:
def edit(conn, %{"id" => id}) do
user = Repo.get(User, id)
changeset = User.update_changeset(user)
render(conn, "edit.html", user: user, changeset: changeset)
end
所以我想知道哪种方法更好,并查看查询示例。
使用 id
字段取决于您的主键是否为整数。目前可能是这样,但会一直这样吗?您可以确定 inserted_at
将始终是一个时间字段 - 所以我会使用它。无论您使用哪种,请务必按降序排列,以便最新的排在最前面。
title = "Page 1"
query = Ecto.Query.from(e in Entry,
where: e.title == ^title,
order_by: [desc: e.inserted_at],
limit: 1)
most_recent = Repo.one(query)
值得注意的是,在 Ecto 中 - 默认情况下插入时间被捕获为 inserted_at
而不是 created_at
- 如果你有 created_field
那么你可以替换 inserted_at
在我的例子中。
也可以使用 Ecto 表达式语法来完成此操作,Ecto.Query.last/2
如下所示:
alias App.Entry
import Ecto.Query
Entry |> where(title: "Page 1") |> last(:inserted_at) |> Repo.one
请参阅 last/2
here 的文档!