如何在 Laravel 5 迁移中使用时区设置时间戳

How to set TimeStamp with Timezone in Laravel 5 Migrate

我在迁移 laravel 5 中设置了时间戳,如下所示:

$table->timestamp('verify_account')->nullable();

但是,postgresql 中没有设置时区。我想在postgresql中设置带时区的时间戳,怎么办?

我已经解决了我的问题。我在 laravel 供应商目录中添加了一些代码

第一步,打开

vendor/laravel/framework/src/illuminate/Database/Schema/Blueprint.php

然后,添加:

public function timestampz($column)
{
    return $this->addColumn('timestamptz', $column);
}

之后,打开

vendor/laravel/framework/src/illuminate/Database/Schema/Grammars/PostgresGrammar.php

然后,添加:

 protected function typeTimestamptz(Fluent $column)
    {
        return 'timestamp(0) with time zone';
    }

使用方法: 在你的迁移文件中,是这样的:

$table->timestampz('yourcolumntimestampwithtimezone');

更新

  1. 在 app/Custom 中创建文件,为其命名 CustomBlueprint.php。如果您没有自定义目录,请先创建。

CustomBlueprint.php :

namespace App\Custom;

use Illuminate\Database\Schema\Blueprint;

class CustomBlueprint extends Blueprint {

    public function timestampz($column)
    {
        return $this->addColumn('timestamptz', $column);
    }

}
  1. 创建CustomPgsqlGrammar.php.

CustomPgsqlGrammar.php:

namespace App\Custom;

use Illuminate\Support\Fluent;
use Illuminate\Database\Schema\Grammars\PostgresGrammar;

class CustomPgsqlGrammar extends PostgresGrammar {

    protected function typeTimestamptz(Fluent $column)
    {
        return 'timestamp(0) with time zone';
    }

}
  1. 在您的迁移文件中:

别忘了

use App\Custom\CustomBlueprint;
use App\Custom\CustomPgsqlGrammar;
use Illuminate\Database\Migrations\Migration;

然后在

之前添加下面的代码

Schema::create

DB::connection()->setSchemaGrammar(new CustomPgsqlGrammar());
$schema = DB::connection()->getSchemaBuilder();

$schema->blueprintResolver(function($table, $callback) {
    return new CustomBlueprint($table, $callback);
});
  1. 使用方法:

    $schema->create('users', 函数(CustomBlueprint $table) {

    $table->timestampz('completing_registration');
    

    }

现在有一个 timestampsTz 函数在使用 Postgres 时可用。它应该在 Laravel 5.1 及更高版本中可用。