7

Elixir で ecto を使用してクエリを作成するとき、'where' 句で時間を比較する方法がよくわかりません。

スキーマ部分で次のように宣言create_atします:datetime

 schema "tenant" do
   field :id, :integer
   field :created_at, :datetime
   # timestamps([{:inserted_at,:created_at}])

 end

クエリ部分は次のようになります

def sample_query do
  query = from t in Tenant,
    where: t.id == 123,
    where: t.created_at == %Ecto.DateTime{{2015, 4, 27}, {10, 8, 42}},
    select: t
end

どうやら

where: t.created_at <= %Ecto.DateTime{{2015, 4, 27}, {10, 8, 42, 0}},

パーツの形状が間違っています。誰かが正しい方法でそれを行う方法を教えてもらえますか?

PS:フィールドの定義方法についてはcreate_at、以下のリンクで答えが得られました

Ecto と Elixir のデフォルトの日時

4

1 に答える 1

9

%Ecto.DateTime{}そのような erlang の日付/時刻タプルから構造体を作成することはできません。あなたがする必要があります:

def sample_query do
  query = from t in Tenant,
    where: t.id == 123,
    where: t.created_at == ^Ecto.DateTime.from_erl({{2015, 4, 27}, {10, 8, 42, 0}}),
    select: t
end

%Ecto.DateTime{}時間の値が別の場所から来ていて、自分で構造体を作成したい場合は、次のようにします。

^%Ecto.DateTime{year: 2015, month: 4, day: 27, hour: 10, min: 8, sec: 42, usec: 0}

(^に注意)

于 2015-05-13T10:37:01.183 に答える