运行此代码时:
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。
导致此问题的原因以及如何解决此问题?
答案 0 :(得分:0)
事实证明,在转换为数组之前似乎处理了$attributes
,将其更改为JSON字符串似乎可以修复它:
protected $attributes = [
"jsontest" => "{}",
];
我不完全确定这是发生了什么,但我不再收到错误,数据已正确保存到数据库中。