Laravel 5 中的时间戳 (updated_at, created_at) 为空
Posted
技术标签:
【中文标题】Laravel 5 中的时间戳 (updated_at, created_at) 为空【英文标题】:Timestamps (updated_at, created_at) are null in Laravel 5 【发布时间】:2016-08-28 03:36:11 【问题描述】:我对 Laravel 5 中的 updated_at
、created_at
字段有疑问。
这是我的迁移:
Schema::create('lots', function (Blueprint $table)
$table->increments('id');
$table->integer('lot');
$table->integer('is_active');
$table->timestamps();
);
但是当我在这个表中插入一些数据时,updated_at
和 created_at
字段为空。如何使它们使用当前时间戳自动完成?
我这样插入数据:
\DB::table('admin_lots')->insert([
'lot' => $request->cycle_lot,
'is_active' => '1',
]);
谢谢。
【问题讨论】:
请告诉我们如何插入数据。 【参考方案1】:你可能在插入数据时不使用 Eloquent,在这种情况下你应该手动添加时间戳。
如果您不想这样做,但仍需要填充时间戳,use this hack:
$table->timestamp('created_at')->default(\DB::raw('CURRENT_TIMESTAMP'));
$table->timestamp('updated_at')->default(\DB::raw('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'));
更新
根据您更新的代码,这是另一个解决方案:
\DB::table('admin_lots')->insert([
'lot' => $request->cycle_lot,
'is_active' => '1',
'created_at' = \Carbon\Carbon::now()->toDateTimeString(),
'updated_at' = \Carbon\Carbon::now()->toDateTimeString()
]);
【讨论】:
更新了我如何插入数据的帖子。谢谢你的回答,马上试试。 添加了另一种基于您的代码手动创建时间戳的解决方案。 老实说,这似乎是 eloquent 的一个用例。在这种情况下,直接插入数据库是一种不好的做法。 谢谢!两种解决方案都对我有用,但第一个更好。非常感谢! 是的。但这种 hack 肯定会让其他人头疼。【参考方案2】:你必须在 laravel 中使用 create 方法而不是 insert 方法。
Create 方法自动为 created_at 和 updated_at 字段添加时间戳。
User::create(array('name' => 'John'));
【讨论】:
完美,我使用的是insert
而不是create
方法。
在这种情况下,我使用 insert(),因为多次插入.. 我必须做什么?【参考方案3】:
检查你的模型是否有这条线。
public $timestamps = false;
如果有,删除它。
【讨论】:
如果该行在父类中,则必须添加:public $timestamps = true;【参考方案4】:当你直接插入数据时,Laravel 不会知道你的时间戳。 您可以在插入语句中手动设置时间戳,或者切换到使用 Eloquent 模型,它可以为您处理许多开箱即用的事情,包括时间戳。在适用的情况下,它也比直接查询更容易维护。
Eloquent ORM
【讨论】:
我真的推荐在这种情况下使用 Eloquent。其他任何事情都会导致不必要的难以维护的非 laravel 方式代码。【参考方案5】:你需要使用 Laravel 很棒的 Eloquent 功能来自动将时间戳写入数据库...
通过查看您的示例,雄辩的代码将如下所示:
$lot_inputs = array(
'lot' => $request->cycle_lot,
'is_active' => 1
);
$new_lot = Lot::create($lot_inputs);
请注意,您应该拥有 table = 'lots' 的模型(并且它必须扩展 Eloquent),以便您可以轻松使用 Eloquent 方法及其属性...
如果您尽可能多地使用Eloquent ORM,那就太好了,这样如果您将来想要更改您的数据库技术,那么您就不需要再次指定书面的雄辩查询(例如:将查询转换为不同的数据库语言由 Eloquent 自动完成)
谢谢,希望这能帮助您解决问题..!!
【讨论】:
以上是关于Laravel 5 中的时间戳 (updated_at, created_at) 为空的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 合并 created_at 和 updated_at 时间戳
如何更新 Laravel Eloquent 管理的时间戳(created_at 和 updated_at)的时区?