如何在 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 列类型?的主要内容,如果未能解决你的问题,请参考以下文章