Laravel Eloquent - 在PostgreSQL中更新JSON col时遇到问题

时间:2017-11-07 20:44:29

标签: php json postgresql eloquent jsonb

第1部分:主要问题

在我的+------------+---------+ | CustomerID | OrderID | +------------+---------+ | 18 | 7 | | 8 | 1 | +------------+---------+ 表(PostgreSQL 9.6)上,我有一个名为colours_tab的JSONB类型的列。 我在Laravel控制器中有以下代码,它在上述表格中创建了一条新记录:

colours_json_col

上面的代码没有错误或抛出异常,但在执行它之后,我的数据库中的新记录包含以下JSON数据:

$colour_rec = new ColoursModel();
$colour_rec -> colours_json_col = ['fruits' => ['apple' => 'pink'] ];
$colour_rec -> update (['colours_json_col->fruits->apple' => 'green']);
$colour_rec -> saveOrFail();

显然,我想要的是苹果是绿色的,而不是粉红色的!这里的文档(https://laravel.com/docs/5.5/queries#updates)表明我正在做正确的事情,以便将其设置为“绿色”。谁能看到我做错了什么?

第2部分:奖金问题

为了防止上述代码出错,我必须在模型中将{"fruits": {"apple": "pink"}} 列声明为colours_json_col

$fillable

如果可能的话,我真的不想将列设置为protected $fillable = ['colours_json_col']; 。因此,有没有办法更新值而无需调用$fillable函数?

1 个答案:

答案 0 :(得分:1)

在一个问题中回答问题的两个部分:

$colour_rec = new ColoursModel();
$colour_rec -> colours_json_col = ['fruits' => ['apple' => 'pink'] ];
$colour_rec -> setAttribute ('colours_json_col->fruits->apple', 'green');
$colour_rec -> saveOrFail();

据我所知,这似乎是Eloquent的一个无证件。