gpt4 book ai didi

elixir - 无法转换为类型 :naive_datetime in query

转载 作者:行者123 更新时间:2023-12-04 17:44:18 30 4
gpt4 key购买 nike

我有疑问:

 PhoenixApp.one(from r in PhoenixApp.Reply,
where: r.inserted_at > ^datatime,
select: count(r.id))

此查询失败并显示错误: value '#Ecto.DateTime<2016-12-04 20:11:21>' in 'where' cannot be cast to type :naive_datetime in query:
但是当使用 type(^datatime, Ecto.DateTime) 转换数据时间时其作品。

问题 : 怎么回事,看起来 datatime 最初有 DateTime类型?

使用新的 Ecto 2.1.2

最佳答案

看起来 Ecto 不支持从已弃用的 Ecto.DateTime 中进行转换到新的 Elixir NaiveDateTime struct,您在使用 :naive_datetime 时使用的在 Ecto 2.1+ 中:

iex(1)> dt = Ecto.DateTime.utc
#Ecto.DateTime<2017-01-08 12:11:59>
iex(2)> Ecto.Type.cast :naive_datetime, dt
:error

Ecto 2.1 中推荐的方法是停止使用已弃用的 Ecto.DateTime结构和使用 Elixir 的新 NaiveDateTime (或 DateTime )无处不在。如果你仍然想在它们之间显式转换,你可以做 |> Ecto.DateTime.to_erl |> NaiveDateTime.from_erl!并在您的查询中使用该值:
iex(1)> dt = Ecto.DateTime.utc
#Ecto.DateTime<2017-01-08 12:13:50>
iex(2)> dt |> Ecto.DateTime.to_erl |> NaiveDateTime.from_erl!
~N[2017-01-08 12:13:50]

如果您从 Ecto 查询中获取旧结构,则您可能在架构中为它们定义了旧类型,您应该将其从 field :foo, Ecto.DateTime 更改。至 field :foo, NaiveDateTime (或 field :foo, DateTime)。

另见: https://github.com/elixir-ecto/ecto/blob/v2.1/CHANGELOG.md#integration-with-elixir-13-calendar-types .

关于elixir - 无法转换为类型 :naive_datetime in query,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41532233/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com