【发布时间】:2017-04-05 05:25:10
【问题描述】:
我有一列以
的形式在 MySQL 表中存储 JSON 格式的数据a:3:{s:2:"12";s:0:"";s:2:"34";s:0:"";s:2:"56";s:10:"1234567890";}
但自从 $cast 在 Laravel 5 中引入后,我打算重新格式化我的数据和代码以使用 array 强制转换。
没有找到直接转换的提示,所以试试这个:
- 创建了一个与原始列 (colA) 具有相同属性 (colB) 的列。
- 在我的模型中插入了这个
protected $casts = ['colA' => 'json', 'colB' => 'array']; - 执行此代码:
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() expects parameter 1 to be string 错误,即使我dd($item->colA) 我得到了一个完美的字符串。而且,更神奇的是,如果我 dd(unserialize($item->colA)) 我得到一个完美的数组。
我虽然可能是我的数据导致了这种情况,但我尝试用一个只有一行的表来做这件事,但无济于事。
感谢任何提示!
【问题讨论】:
标签: mysql arrays json laravel-5 casting