Laravel + PostgreSQL Ltree
Laravel + PostgreSQL Ltree
如何写迁移文件添加字段类型'ltree'(PostgreSQL)
Schema::create('table', function (Blueprint $table) {
....
$table->ltree('path');
}
无效。
谢谢!
查看可用功能的手册:
https://laravel.com/docs/5.1/migrations#creating-columns
Laravel 的目标是兼容性,因此除非所有支持的数据库中都有等效结构,否则它们不太可能原生支持它。
您可以 运行 SQL 语句手动使用 DB::statement('CREATE TABLE ...')
请记住,您的应用程序将被锁定到 postgres,这可能并不理想。
作为快速解决方案,在您的迁移中使用此方法:
public function up ()
{
Schema::create('locations', function (Blueprint $table) {
$table->increments('id');
$table->uuid('uuid')->unique();
$table->string('path', 255); // <--- my ltree field
$table->timestamps();
});
$query = 'ALTER TABLE locations ALTER COLUMN path TYPE "ltree" USING "path"::"ltree";';
\Illuminate\Support\Facades\DB::connection()->getPdo()->exec($query);
}
这里 business_category
是我的 ltree
数据类型
public function up()
{
Schema::create('business_categories', function (Blueprint $table) {
$table->increments('business_category_id')->generatedAs();
$table->string('business_category')->nullable();
$table->timestamps();
});
DB::statement("ALTER TABLE business_categories ADD COLUMN business_category_path ltree");
DB::statement("CREATE INDEX business_categories_business_category_path_gist_idx ON business_categories USING gist(business_category_path)");
DB::statement("CREATE INDEX business_categories_business_category_path_idx ON business_categories USING btree(business_category_path)");
}
如果 ltree
扩展未启用,您还必须启用它。
try {
DB::statement("create extension ltree");
} catch (\Throwable $e) {
print "ltree extension already exist";
}
如何写迁移文件添加字段类型'ltree'(PostgreSQL)
Schema::create('table', function (Blueprint $table) {
....
$table->ltree('path');
}
无效。
谢谢!
查看可用功能的手册: https://laravel.com/docs/5.1/migrations#creating-columns
Laravel 的目标是兼容性,因此除非所有支持的数据库中都有等效结构,否则它们不太可能原生支持它。
您可以 运行 SQL 语句手动使用 DB::statement('CREATE TABLE ...')
请记住,您的应用程序将被锁定到 postgres,这可能并不理想。
作为快速解决方案,在您的迁移中使用此方法:
public function up ()
{
Schema::create('locations', function (Blueprint $table) {
$table->increments('id');
$table->uuid('uuid')->unique();
$table->string('path', 255); // <--- my ltree field
$table->timestamps();
});
$query = 'ALTER TABLE locations ALTER COLUMN path TYPE "ltree" USING "path"::"ltree";';
\Illuminate\Support\Facades\DB::connection()->getPdo()->exec($query);
}
这里 business_category
是我的 ltree
数据类型
public function up()
{
Schema::create('business_categories', function (Blueprint $table) {
$table->increments('business_category_id')->generatedAs();
$table->string('business_category')->nullable();
$table->timestamps();
});
DB::statement("ALTER TABLE business_categories ADD COLUMN business_category_path ltree");
DB::statement("CREATE INDEX business_categories_business_category_path_gist_idx ON business_categories USING gist(business_category_path)");
DB::statement("CREATE INDEX business_categories_business_category_path_idx ON business_categories USING btree(business_category_path)");
}
如果 ltree
扩展未启用,您还必须启用它。
try {
DB::statement("create extension ltree");
} catch (\Throwable $e) {
print "ltree extension already exist";
}