5

我只是从数据库和查询(来自前端)开始,我想从包含特定的字段中选择最新条目title,比如Page1. 我知道我有两个领域可以帮助我: 1) created_at- 我可以订购它,只选择最新的;2) id- 我知道每个条目都会生成一个新条目,id因此我可以获得最大的条目id;我想将其应用于“标准”编辑控制器操作:

 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

所以我想知道哪种方法更好,并查看查询示例。

4

2 回答 2

9

使用该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

于 2015-09-18T14:03:23.490 回答
4

也可以使用 Ecto 表达式语法来完成此操作,Ecto.Query.last/2如下所示:

alias App.Entry
import Ecto.Query

Entry |> where(title: "Page 1") |> last(:inserted_at) |> Repo.one

请参阅last/2 此处的文档!

于 2017-08-24T18:39:57.010 回答