在 laravel 11 / php 8.2 应用程序中,我需要向 UserOption 模型的 json 值字段添加几个值,我使用代码完成此操作:
array_push($this->selectedCurrencies, array_values($userOption->value));
$userOption->value = array_values($this->selectedCurrencies);
$userOption->save();
但是在值字段中我看到的是新元素和旧值的子数组,而不是我需要的平面数组?
如何修复它?
您为 提供了一个值作为第二个参数
array_push
,这意味着整个$userOption->value
数组将作为一个值附加。我建议您可能希望扩展它并单独添加所有元素,例如使用...array_values($userOption->value)
:请参阅https://www.php.net/manual/en/functions.arguments.php#functions.variable-arg-list
如果值字段是 json,则要执行所需的操作,首先需要通过 json_decode 将值字段从 json 解码为数组。此外,在我看来,您要做的就是将 selectedCurrencies 数组与值数组连接成一个唯一数组,并将其存储到模型中。
仅当您想将新数组保存为 Json 时,我才会使用 json_encode。如果您想要数组,则可以避免使用 json_encode。
并非每个带有序列化 JSON 字段的模型都会被设计为在每次检索时自动解码该字段。例如,让我们想象一下这样一种情况,您正在处理的项目有更多类型的请求需要使用该字段,例如 AJAX 调用,它与 JSON 配合得更好。在这种情况下,不确定您是否有此模型的强制类型转换。所以在这种情况下 Json_decode 更安全。您不必担心忘记模型没有针对感兴趣的 JSON 字段的强制类型转换。另一方面,如果您每次都认为解码是自动的,那么您更容易受到错误的影响,例如,对于没有您正在处理的字段的强制类型转换的模型,不包括 json_decode。