如何在Laravel 4中创建Hstore列类型?

时间:2013-09-29 15:36:28

标签: php orm laravel laravel-4 hstore

我正在使用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

1 个答案:

答案 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