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

Posted

技术标签:

【中文标题】如何在 Laravel 4 中创建 Hstore 列类型?【英文标题】:How to create an Hstore column type in Laravel 4? 【发布时间】:2013-10-05 11:13:12 【问题描述】:

我在 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

【问题讨论】:

我能够使用以下命令使其工作(看起来我的方法错误并且在 SQL 上关闭了)。 DB::statement("ALTER TABLE entities ALTER attributes TYPE hstore USING (attributes::hstore);"); 如果 Laravel 合并自定义列类型就好了。 【参考方案1】:

这可以使用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

【讨论】:

以上是关于如何在 Laravel 4 中创建 Hstore 列类型?的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 5.4 中创建表单的最佳方法是啥?

在 Laravel 4 迁移中创建 MYSQL FUNCTION

如何在 laravel 中创建自定义关系?

如何在 laravel 中创建子域

如何在 Laravel 中创建嵌套集合?

如何在 Laravel 中创建数据库模式(表)?