Laravel 5中的时间戳(updated_at,created_at)为空

时间:2016-05-03 07:31:15

标签: laravel laravel-5 laravel-5.2

Laravel 5中的updated_atcreated_at字段存在问题。

这是我的迁移:

Schema::create('lots', function (Blueprint $table) {
    $table->increments('id');
    $table->integer('lot');
    $table->integer('is_active');
    $table->timestamps();
});

但是当我在此表中插入一些数据时,updated_atcreated_at字段为空。如何使用当前时间戳自动完成它们?

我插入这样的数据:

\DB::table('admin_lots')->insert([
    'lot' => $request->cycle_lot,
    'is_active' => '1',
]);

感谢。

5 个答案:

答案 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模型,它可以为您提供开箱即用的许多功能,包括时间戳。在适用的情况下,它比直接查询更容易维护。

Eloquent ORM

答案 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'));