如何在 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');
更新
- 在 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);
}
}
- 创建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';
}
}
- 在您的迁移文件中:
别忘了
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);
});
使用方法:
$schema->create('users', 函数(CustomBlueprint $table)
{
$table->timestampz('completing_registration');
}
现在有一个 timestampsTz
函数在使用 Postgres 时可用。它应该在 Laravel 5.1 及更高版本中可用。
我在迁移 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');
更新
- 在 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);
}
}
- 创建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';
}
}
- 在您的迁移文件中:
别忘了
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);
});
使用方法:
$schema->create('users', 函数(CustomBlueprint $table) {
$table->timestampz('completing_registration');
}
现在有一个 timestampsTz
函数在使用 Postgres 时可用。它应该在 Laravel 5.1 及更高版本中可用。