【问题标题】:laravel updated_at default null and on update current timstamp migrationlaravel updated_at 默认为 null 并更新当前时间戳迁移
【发布时间】:2019-05-06 07:00:05
【问题描述】:

这就是我想要做的,当创建一个新行时,updated_at 列应该得到一个null 值,当该行更新时,该列应该填充当前的timestamp

Schema::create('city', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name')->unique();
        $table->enum('visibilty', ['Visible', 'Invisible'])->default('Invisible');
        $table->string('created_by')->nullable();
        $table->softDeletes();
        $table->dateTime('created_at')->default(\DB::raw('DATETIME'));
        $table->timestamp('updated_at')->default(\DB::raw('CURRENT_TIMESTAMP'));
    });

【问题讨论】:

  • 试试timestamp('updated_at')->nullable()? Eloquent 在保存时无论如何都会更新时间戳,所以除非你没有使用 Eloquent,否则你不需要添加任何其他内容。
  • 作为一个选项,Schema Builder 有$table->nullableTimestamps(),它将创建created_atupdated_at 作为具有空值的时间戳字段。 Eloquent 仍然会在创建时插入 created_at,并在更新时更新 updated_at。
  • 当您使用eloquent 时,它会在您创建新行时插入当前timestamp,您应该使用DB::table('table_name')->insert([]) 来创建新行。

标签: php laravel laravel-5 database-migration


【解决方案1】:

$table->timestamp('updated_at')->default(DB::raw('ON UPDATE SYSTIMESTAMP'));

【讨论】:

  • 您能否在您的答案中添加一点解释? stackoverflow 不欢迎唯一的代码答案。
【解决方案2】:

你可以用这个:

$this->timestamp('updated_at')->nullable()->default(DB::raw('NULL ON UPDATE CURRENT_TIMESTAMP'));

【讨论】:

    猜你喜欢
    • 2013-08-06
    • 2019-01-22
    • 1970-01-01
    • 2015-03-02
    • 2015-02-17
    • 2020-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多