Php Laravel雄辩-在PostgreSQL中更新JSON列时遇到问题
第1部分:主要问题 在我的Php Laravel雄辩-在PostgreSQL中更新JSON列时遇到问题,php,json,postgresql,eloquent,jsonb,Php,Json,Postgresql,Eloquent,Jsonb,第1部分:主要问题 在我的colors\u选项卡表(PostgreSQL 9.6)中,我有一个名为colors\u json\u col的JSONB类型的列。 我的Laravel控制器中有以下代码,可在上述表格中创建新记录: $colour_rec = new ColoursModel(); $colour_rec -> colours_json_col = ['fruits' => ['apple' => 'pink'] ]; $colour_rec -> update
colors\u选项卡
表(PostgreSQL 9.6)中,我有一个名为colors\u json\u col
的JSONB类型的列。
我的Laravel控制器中有以下代码,可在上述表格中创建新记录:
$colour_rec = new ColoursModel();
$colour_rec -> colours_json_col = ['fruits' => ['apple' => 'pink'] ];
$colour_rec -> update (['colours_json_col->fruits->apple' => 'green']);
$colour_rec -> saveOrFail();
上述代码不会出错或引发异常,但执行后,我的数据库中的新记录包含以下JSON数据:
{"fruits": {"apple": "pink"}}
显然,我想要的是苹果是绿色的,而不是粉红色的!这里的文档()表明我正在做正确的事情,以便将其设置为“绿色”。有人能看出我做错了什么吗
第2部分:奖金问题
为了防止上述代码出错,我不得不在模型中将列colors\u json\u col
声明为$filleble
:
protected $fillable = ['colours_json_col'];
如果可能的话,我真的不想将列设置为
$filleble
。因此,是否有一种方法可以在不调用update()
函数的情况下更新值?一次回答问题的两部分:
$colour_rec = new ColoursModel();
$colour_rec -> colours_json_col = ['fruits' => ['apple' => 'pink'] ];
$colour_rec -> setAttribute ('colours_json_col->fruits->apple', 'green');
$colour_rec -> saveOrFail();
据我所知,这似乎是一个雄辩的未记录功能