第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
函数?
答案 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的一个无证件。