gpt4 book ai didi

mysql - 使用 Laravel 将 JSON 转换为 MySQL 列中的数组

转载 作者:行者123 更新时间:2023-11-29 19:55:10 26 4
gpt4 key购买 nike

我有一列以 JSON 格式存储在 MySQL 表中,格式为

a:3:{s:2:"12";s:0:"";s:2:"34";s:0:"";s:2:"56";s:10:"1234567890";}

但是自从 Laravel 5 中引入了 $cast 以来,我计划重新格式化我的数据和代码以与 array 转换一起使用。

没有找到直接转换的提示,所以尝试了这个:

  1. 创建了一个具有与原始列 (colA) 相同属性 (colB) 的列。
  2. 将其插入到我的模型中 protected $casts = ['colA' => 'json', 'colB' => 'array'];
  3. 执行此代码:
<小时/>
foreach(Model::all() as $item){
$item->colB = $item->colA;
$item->save();
}

代码执行时没有错误,但什么也没发生。 colB 是空的。不过,也许 Laravel 不喜欢我的 JSON 格式,所以我将代码更改为:

foreach(Model::all() as $item){
$item->colB = unserialize($item->colA);
$item->save();
}

protected $casts = ['colB' => 'array'];

但是我得到了 unserialize() Expectsparameter 1 to be string 错误,即使我 dd($item->colA) 我得到了一个完美的字符串。而且,更令人惊奇的是,如果我 dd(unserialize($item->colA)) 我会得到一个完美的数组。

我虽然可能是我的数据导致了这种情况,并尝试使用具有单行的表来执行此操作,但无济于事。

任何提示表示赞赏!

最佳答案

如果您使用的是 $fillable$guarded,请确保 colB 已添加到 $fillable 中,以便您可以更新它。

例如

protected $fillable = [ 'colA', 'colB' ];

可能是您的第一个脚本没有更改数据库中任何内容的原因......

另一种选择是取消模型中所有内容的保护...

protected $guarded = [];

关于mysql - 使用 Laravel 将 JSON 转换为 MySQL 列中的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40726569/

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