Php 如何使用eloquent从存储在数据库中的json中删除项目?

Php 如何使用eloquent从存储在数据库中的json中删除项目?,php,laravel,eloquent,Php,Laravel,Eloquent,我有一个模型,它将数据存储在中,如下所示: { "id": "1f280536-3aa2-45d9-8f23-41c27a26c8bf", "setting": { "item 1": "first item", "item 2": "second item

我有一个模型,它将数据存储在中,如下所示:

{
            "id": "1f280536-3aa2-45d9-8f23-41c27a26c8bf",
            "setting": {
                "item 1": "first item",
                "item 2": "second item",
                "logo": {
                    "small": "1anFsLsviRf_8zI5u8x5BY3OSf-jWAWkE"
                }
            },
}
如您所见,设置是一个json,其中包含另一个嵌套的json
logo
。我有一个destroy controller方法,可以从
logo
json中删除单个logo,但当我尝试变异
logo
时,我得到了
ErrorException:间接修改重载属性App\Models\Company::$设置在文件中没有效果
错误。我在存储新徽标时遇到了相同的错误,但我使用
array\u merge

 $company->setting = array_merge($company->setting, array("logo"=>array_merge($company->setting["logo"], array($request->size=>$file_id))));

如何解决删除单个键值对表单
logo
json时的问题?

您可以
json\u解码
公司设置,然后删除
logo

$setting = json_decode($company->setting, true);

unset($setting['setting']['logo']);

$company->setting = json_encode($setting);

我已经尝试过这样做,但出现“json_decode()期望参数1为字符串,文件中给定的数组”错误$公司->设置已经是一个数组,不需要解码。很好,所以你需要第二部分!我尝试了“unset”方法,但仍然得到“间接修改重载属性”错误。