Phoenix 框架 Ecto 为时间戳赋予默认值
Phoenix framework Ecto give default value to timestamp
我想知道如何自动填充由 timestamp() 生成的 "updated_at" 和 "inserted_at" 列。
目标是不指定这些值,因为它必须是自动的。
我知道如何处理其他列。
schema "users" do
field :newsletter, :boolean, default: false
timestamps(type: :utc_datetime)
end
我试过了
schema "users" do
field :newsletter, :boolean, default: false
field :inserted_at,:utc_datetime, default: :utc_datetime
field :updated_at,:utc_datetime, default: :utc_datetime
end
但是当我 运行:
时,它似乎不起作用或者没有考虑到更改
mix ecto.migrate
是我的代码有误还是使用了错误的命令行?
在我的 SQL 模式中我有
newsletter BOOLEAN DEFAULT FALSE NOT NULL,
inserted_at TIMESTAMP NOT NULL,
updated_at TIMESTAMP NOT NULL,
不管我怎么努力,我不能在最后两行有 "DEFAULT TIMESTAMP"。
我必须先删除 table 才能工作吗?
要在数据库中设置列的默认值,您需要使用迁移。在 schema
声明中设置它不会影响数据库。像下面这样的东西应该在迁移中工作并使这两列默认为 NOW()
:
alter table(:users) do
modify(:inserted_at, :timestamp, default: fragment("NOW()"))
modify(:updated_at, :timestamp, default: fragment("NOW()"))
end
作为timestamps()对add()的调用,可以直接传选项:default,用一个fragment一步设置。
schema "users" do
field :newsletter, :boolean, default: false
timestamps(default: fragment("NOW()"))
end
我想知道如何自动填充由 timestamp() 生成的 "updated_at" 和 "inserted_at" 列。
目标是不指定这些值,因为它必须是自动的。 我知道如何处理其他列。
schema "users" do
field :newsletter, :boolean, default: false
timestamps(type: :utc_datetime)
end
我试过了
schema "users" do
field :newsletter, :boolean, default: false
field :inserted_at,:utc_datetime, default: :utc_datetime
field :updated_at,:utc_datetime, default: :utc_datetime
end
但是当我 运行:
时,它似乎不起作用或者没有考虑到更改mix ecto.migrate
是我的代码有误还是使用了错误的命令行?
在我的 SQL 模式中我有
newsletter BOOLEAN DEFAULT FALSE NOT NULL,
inserted_at TIMESTAMP NOT NULL,
updated_at TIMESTAMP NOT NULL,
不管我怎么努力,我不能在最后两行有 "DEFAULT TIMESTAMP"。
我必须先删除 table 才能工作吗?
要在数据库中设置列的默认值,您需要使用迁移。在 schema
声明中设置它不会影响数据库。像下面这样的东西应该在迁移中工作并使这两列默认为 NOW()
:
alter table(:users) do
modify(:inserted_at, :timestamp, default: fragment("NOW()"))
modify(:updated_at, :timestamp, default: fragment("NOW()"))
end
作为timestamps()对add()的调用,可以直接传选项:default,用一个fragment一步设置。
schema "users" do
field :newsletter, :boolean, default: false
timestamps(default: fragment("NOW()"))
end