我正在使用Laravel 4中的迁移内部的Schema Builder来在开发期间管理我的Postgres数据库。我遇到了一个问题。我想在我的表中使用Postgres Hstore列类型,但我无法弄明白。
Schema Builder中似乎没有“自定义”列类型(我可以找到),所以这是我在迁移中的尝试。这不适合我。
Schema::create('entities', function(Blueprint $table)
{
$table->bigIncrements('id');
$table->string('type');
$table->string('name');
$table->text('data')->nullable();
$table->timestamps();
$table->softDeletes();
});
DB::raw("ALTER TABLE `entities` CHANGE COLUMN `data` `data` hstore NULL;");
我也试过这个而不是最后一个命令。没有运气。
DB::raw("ALTER TABLE `entities` ALTER `data` TYPE hstore;");
注意:我已经在我的数据库中运行了命令CREATE EXTENSION hstore
。
答案 0 :(得分:2)
可以使用Builder::blueprintResolver
函数
$builder = DB::connection()->getSchemaBuilder();
$builder->blueprintResolver(function($table, $callback) {
return new CustomPostgresBlueprint($table, $callback);
});
$builder->create('record_sets', function(CustomPostgresBlueprint $table) {
$table->increments('id');
$table->hstore('schema');
$table->timestamps();
});
您还需要在自定义PostgresGrammer
子类中实现typeHstore函数。有关完整的实施细节,请查看here