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

时间:2016-11-21 18:03:06

标签: mysql arrays json laravel-5 casting

我有一个列以

的形式在MySQL表中以JSON格式存储数据
computerName

但是自从Laravel 5中引入NodeJs以来,我一直计划重新格式化我的数据和代码以用于数组转换。

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

  1. 创建了一个与原始列(colA)具有相同属性(colB)的列。
  2. 在我的模型a:3:{s:2:"12";s:0:"";s:2:"34";s:0:"";s:2:"56";s:10:"1234567890";}
  3. 中插入此内容
  4. 执行此代码:
  5. $cast

    代码执行没有错误,但什么也没发生。 colB是空的。 虽然Laravel可能不喜欢我的JSON格式,但我将代码更改为:

    protected $casts = ['colA' => 'json', 'colB' => 'array'];

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

    但是我遇到foreach(Model::all() as $item){ $item->colB = unserialize($item->colA); $item->save(); } 错误,即使我protected $casts = ['colB' => 'array'];我得到了一个完美的字符串。而且,这更令人惊讶,如果我unserialize() expects parameter 1 to be string我得到一个完美的数组。

    我可能是因为我的数据导致了这种情况,并尝试使用一个单行无效的表格。

    任何提示赞赏!

1 个答案:

答案 0 :(得分:0)

如果您使用的是$fillable$guarded,请确保已将colB添加到$fillable,以便您可以对其进行更新。

E.g。

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

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

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

protected $guarded = [];