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

el *_*uta 7 laravel laravel-5 laravel-5.2

我有一个问题updated_at,created_at在Laravel 5中的字段.

这是我的迁移:

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

但是,当我插入一些数据到这个表中,updated_at并且created_at字段为空.如何使用当前时间戳自动完成它们?

我插入这样的数据:

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

谢谢.

Yev*_*yev 7

检查您的模型是否有这条线。

public $timestamps = false;
Run Code Online (Sandbox Code Playgroud)

如果有,删除它。


Ale*_*nin 6

插入数据时可能不使用Eloquent,在这种情况下,您应手动添加时间戳.

如果您不想这样做,但仍需要填充时间戳,请使用此hack:

$table->timestamp('created_at')->default(\DB::raw('CURRENT_TIMESTAMP'));
$table->timestamp('updated_at')->default(\DB::raw('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'));
Run Code Online (Sandbox Code Playgroud)

更新

根据您更新的代码,这是另一个解决方案:

\DB::table('admin_lots')->insert([
                'lot'   => $request->cycle_lot,
                'is_active'     => '1',
                'created_at' = \Carbon\Carbon::now()->toDateTimeString(),
                'updated_at' = \Carbon\Carbon::now()->toDateTimeString()
            ]);
Run Code Online (Sandbox Code Playgroud)


ove*_*urn 5

当您直接处理数据时,Laravel将不会知道您的时间戳.您可以在insert语句中手动设置时间戳,也可以切换到使用Eloquent模型,它可以为您提供开箱即用的许多功能,包括时间戳.在适用的情况下,它比直接查询更容易维护.

雄辩的ORM

  • 我真的建议在这种情况下使用Eloquent.任何其他东西都会导致不必要的难以维护的非laravel方式代码. (3认同)

小智 5

您必须在laravel中使用create方法而不是insert方法。Create方法会自动为created_at和Updated_at字段添加时间戳。 User::create(array('name' => 'John'));

  • 完美,我使用的是“插入”而不是“创建”方法。 (2认同)