首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ecto中含有Timex.Duration的WHERE子句

Ecto中含有Timex.Duration的WHERE子句
EN

Stack Overflow用户
提问于 2017-02-07 16:25:05
回答 1查看 452关注 0票数 1

我是新来的。关于长生不老和凤凰城。我正在通过创建API来学习灵丹妙药和凤凰。但是,当我使用Timex库时,我在模型查询方面遇到了问题。我想补充一下;

代码语言:javascript
复制
def find_users_randomly(query, user_id, count \\ 10) do
  from a in query,
    where: a.id != ^user_id,
    where: is_nil(a.last_time_get_msg_at),
    or_where: 45 < Timex.Duration.diff(a.last_time_get_msg_at, Duration.now, :minutes),
    order_by: [desc: :last_login_at],
    select: [:id, :uuid],
    limit: ^count
end

但是Timex.Duration.diff(a.last_time_get_msg_at,Duration.now,:给出了下面的错误。

代码语言:javascript
复制
== Compilation error on file web/models/user.ex ==
** (Ecto.Query.CompileError) `Duration.diff(a.last_time_get_msg_at(), Duration.now(), :minutes)` is not a valid query expression

我尝试使用dynamiccast以及基于管道的方法,但是我找不到解决方案。

我能为这个做些什么?你有什么建议?

套餐:

代码语言:javascript
复制
{:timex, "~> 3.1"}
{:phoenix_ecto, "~> 3.0"}
{:phoenix, "~> 1.2.1"}

模型实例;

代码语言:javascript
复制
defmodule Test.User do
  use Test.Web, :model
  use Timex

  alias Timex.Duration

  schema "users" do
    field :last_login_at, Ecto.DateTime, default: Ecto.DateTime
    field :last_time_get_msg_at, Ecto.DateTime

    timestamps()
  end

  def changeset(struct, params \\ %{}) do
    struct
    |> cast(params, [:last_login_at])
    |> validate_required([:last_login_at])
  end

  def find_users_randomly(query, user_id, count \\ 10) do
    from a in query,
      where: a.id != ^user_id,
      where: is_nil(a.last_time_get_msg_at),
      or_where: 45 < Duration.diff(a.last_time_get_msg_at, Duration.now, :minutes),
      order_by: [desc: :last_login_at],
      select: [:id],
      limit: ^count
  end
end

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-07 16:33:16

在PostgreSQL中,您可以减去now()和日期,并与间隔45 minutes进行比较。

代码语言:javascript
复制
or_where: fragment("now() - ? <= interval '45 minutes'", a.last_time_get_msg_at),
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42094980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档