如何编写迁移文件以添加字段类型'ltree'(PostgreSQL)
Schema::create('table', function (Blueprint $table) {
....
$table->ltree('path');
}
不工作。
谢谢!
如何编写迁移文件以添加字段类型'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";
}