如何使用Ecto / Phoenix从数据库中选择最新条目

时间:2015-09-18 13:35:04

标签: postgresql phoenix-framework ecto

我刚开始使用数据库和查询(来自前端),我想从包含特定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

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

2 个答案:

答案 0 :(得分:5)

使用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在我的例子中。

答案 1 :(得分:1)

使用Ecto表达式语法和Ecto.Query.last/2也可以这样做:

alias App.Entry
import Ecto.Query

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

查看last/2 here的文档!

相关问题