2

我在 Laravel 4 的 Migrations 中使用 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在我的数据库中运行了该命令。

4

1 回答 1

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 函数。有关完整的实施细节,请看这里

于 2014-08-07T09:54:15.100 回答