1

如何编写迁移文件以添加字段类型'ltree'(PostgreSQL)

Schema::create('table', function (Blueprint $table) {
     ....
$table->ltree('path');
}

不工作。

谢谢!

4

3 回答 3

3

查看可用功能的手册: https ://laravel.com/docs/5.1/migrations#creating-columns

Laravel 的目标是兼容性,因此除非在所有支持的数据库中都有等效的结构,否则它们不太可能原生支持它。

您可以使用手动运行 SQL 语句DB::statement('CREATE TABLE ...')

请记住,您的应用程序将被锁定到可能不理想的 postgres。

于 2016-12-20T21:15:55.400 回答
1

作为一种快速解决方案,在您的迁移中使用此方法:

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);
}
于 2018-10-20T12:29:33.017 回答
0

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";
}
于 2022-02-04T06:06:34.983 回答