如何使用Laravel模型插入PostgreSQL时间戳

时间:2013-11-09 03:09:40

标签: php postgresql laravel

我正在使用Laravel 4和PostgreSQL。我使用迁移创建了PostgreSQL时间戳字段:

$table->dateTime('start_date');

我尝试插入使用 strtotime 生成的时间戳并收到错误:

Invalid datetime format: 7 ERROR: invalid input syntax for type timestamp: "1383321600" 

黑客攻击它的工作原理:

new MyModel(array('start_date' => DB::raw("to_timestamp($start_date)")));

似乎应该有更好的方法。 Laravel本身为created_at和updated_at自动填充的日期生成时间戳而没有问题。

3 个答案:

答案 0 :(得分:1)

在尝试保存之前,您必须将strtotime的结果转换为MySQL格式。您可以使用date功能执行此操作。

实施例

date('Y-m-d H:i:s', strtotime('some time'))

答案 1 :(得分:0)

似乎用strtotime创建的Unix时间戳未正确转换,但真正的PHP DateTime对象工作正常。

我转而使用date_create使用相同的参数,我可以直接插入它而不使用DB :: raw。

答案 2 :(得分:0)

doc for strtotime()说

  

该函数期望给出一个包含英文日期格式的字符串,并尝试将该格式解析为Unix时间戳

在SQL数据库中, timestamp 并不意味着Unix时间戳。在SQL中,如果要使用标准SQL将时间戳插入表中,则可以这样做。

-- Implicit use
insert into table_name (column_name)
values ('2013-01-01 08:00:00');

-- Explicit use
insert into table_name (column_name)
values (timestamp '2013-01-01 08:00:00');