gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 13:17:18 29 4
gpt4 key购买 nike

第 1 部分:主要问题

在我的 colours_tab 表 (PostgreSQL 9.6) 上,我有一个名为 colours_json_col 的列,类型为 JSONB。我的 Laravel Controller 中有以下代码,它在上述表中创建了一条新记录:

$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"}}

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

第 2 部分:奖金问题

为了防止上面的代码出错,我不得不在模型中声明colours_json_col列为$fillable:

protected $fillable = ['colours_json_col'];

如果可能的话,我真的不想将列设置为 $fillable。因此,有没有一种不用调用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();

据我所知,这似乎是 Eloquent 中未记录的功能。

关于php - Laravel Eloquent - 在 PostgreSQL 中更新 JSON col 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47167102/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com