具有JSON列的Eloquent模型' UNION ALL SELECT' SQL语法错误

时间:2017-02-03 23:28:46

标签: php laravel eloquent

运行此代码时:

App\ExampleJson::create(["name" => "example"]);

在这个模型上:

namespace App;

use Illuminate\Database\Eloquent\Model;

class ExampleJson extends Model
{
    public $timestamps = false;

    protected $fillable = [
        "name",
        "jsontest",
    ];

    protected $casts = [
        "jsontest" => "array",
    ];

    protected $attributes = [
        "jsontest" => [],
    ];
}

使用此迁移创建:

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateExampleJsonsTable extends Migration
{
    public function up()
    {
        Schema::create('example_jsons', function (Blueprint $table) {
            $table->increments('id');
            $table->string("name");
            $table->json("jsontest")->default("{}");
        });
    }

    public function down()
    {
        Schema::dropIfExists('example_jsons');
    }
}

它给了我以下例外:

Illuminate\Database\QueryException with message 'SQLSTATE[HY000]: General error: 1 near ")": syntax error (SQL: insert into "example_jsons" () select union all select )'

我使用SQLite作为我的数据库和Laravel 5.4。

导致此问题的原因以及如何解决此问题?

1 个答案:

答案 0 :(得分:0)

事实证明,在转换为数组之前似乎处理了$attributes,将其更改为JSON字符串似乎可以修复它:

protected $attributes = [
    "jsontest" => "{}",
];

我不完全确定这是发生了什么,但我不再收到错误,数据已正确保存到数据库中。