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',
]);
感谢。
答案 0 :(得分:6)
插入数据时可能不使用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()
]);
答案 1 :(得分:5)
当您直接检测数据时,Laravel将不会知道您的时间戳。 您可以在insert语句中手动设置时间戳,也可以切换到使用Eloquent模型,它可以为您提供开箱即用的许多功能,包括时间戳。在适用的情况下,它比直接查询更容易维护。
答案 2 :(得分:4)
检查您的模型是否有此行。
public $timestamps = false;
如果有,请将其删除。
答案 3 :(得分:1)
您需要使用Laravel的强大Eloquent功能来自动将时间戳写入数据库......
通过查看您的示例,eloquent的代码将如下所示:
$lot_inputs = array(
'lot' => $request->cycle_lot,
'is_active' => 1
);
$new_lot = Lot::create($lot_inputs);
请注意,您应该拥有表格的模型=&#39;批次&#39; (它必须扩展Eloquest),以便您可以轻松使用Eloquent方法及其属性......
如果你尽可能多地使用Eloquent ORM会很好,所以如果将来你想改变你的数据库技术,那么你不需要再次指定书面的雄辩查询(例如:将查询转换为不同的DB语言由Eloquent自动完成
谢谢,我希望这可以帮助您解决问题.. !!
答案 4 :(得分:1)
您必须在Laravel中使用create方法而不是insert方法。
Create方法会自动为created_at和Updated_at字段添加时间戳。
User::create(array('name' => 'John'));