我是新来的。关于长生不老和凤凰城。我正在通过创建API来学习灵丹妙药和凤凰。但是,当我使用Timex库时,我在模型查询方面遇到了问题。我想补充一下;
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,:给出了下面的错误。
== 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我尝试使用dynamic、cast以及基于管道的方法,但是我找不到解决方案。
我能为这个做些什么?你有什么建议?
套餐:
{:timex, "~> 3.1"}
{:phoenix_ecto, "~> 3.0"}
{:phoenix, "~> 1.2.1"}模型实例;
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谢谢!
发布于 2017-02-07 16:33:16
在PostgreSQL中,您可以减去now()和日期,并与间隔45 minutes进行比较。
or_where: fragment("now() - ? <= interval '45 minutes'", a.last_time_get_msg_at),https://stackoverflow.com/questions/42094980
复制相似问题