微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Laravel 迁移:托管服务器上的 Json 列出错,但本地 Xampp 服务器上没有

如何解决Laravel 迁移:托管服务器上的 Json 列出错,但本地 Xampp 服务器上没有

我最近为 wallet 下载并安装了一个软件包,我在其中发布了迁移,这些迁移在某些表中有 JSON 列。

迁移:

public function up(): void
{
    Schema::create($this->table(),function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->morphs('payable');
        $table->enum('type',['deposit','withdraw'])->index();
        $table->decimal('amount',64,0);
        $table->boolean('confirmed');
        $this->json($table,'Meta')->nullable();
        $table->uuid('uuid')->unique();
        $table->timestamps();

        $table->index(['payable_type','payable_id','type'],'payable_type_ind');
        $table->index(['payable_type','confirmed'],'payable_confirmed_ind');
        $table->index(['payable_type','type','payable_type_confirmed_ind');
    });
}

public function json(Blueprint $table,string $column): ColumnDeFinition
{
    $conn = DB::connection();
    if ($conn instanceof MysqLConnection || $conn instanceof PostgresConnection) {
        $pdo = $conn->getPdo();
        try {
            $sql = 'SELECT JSON_EXTRACT(\'[10,20,[30,40]]\',\'$[1]\');';
            $prepare = $pdo->prepare($sql);
            $prepare->fetch();
        } catch (\Throwable $throwable) {
            return $table->text($column);
        }
    }

    return $table->json($column);
}

protected function table(): string
{
    return (new Transaction())->getTable();
}

public function down(): void
{
    Schema::drop($this->table());
}

此迁移在本地 xampp 服务器中运行良好,但我不明白为什么在我的实时服务器中出现错误。以下是我在尝试运行迁移时遇到的错误

Mysql Server Error

我尝试使用 $table->json('Meta')->nullable(); 这也不起作用,尽管我认为这不是一个合适的做法,因为据我所知 $this->json() 调用 json 函数

有些人还建议使用 Text 而不是 Json,但这不是我觉得的解决方案。我们怎样才能解决这个问题?

解决方法

请检查您的 MySQL 版本,如果它是 5.6 或低于功能 json 将不起作用。 您应该使用 MySQL 5.7 或更高版本才能使用 json 函数。或者在 MySQL 5.6 或更低版本中使用“text”作为列。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。