Laravel中JSON类型permissions字段读取返回空数组问题求助
解决Laravel中JSON字段返回空数组的问题
问题原因分析
从你提供的$data数据来看,permissions字段在数据库中实际存储的是转义后的JSON字符串("[{\"user_id\": \"6\"}]"),而非原生的JSON数组。同时你的模型大概率没有正确配置字段类型转换,或代码中存在属性名拼写错误,导致访问时返回空数组。
分步解决方案
- 修正模型的字段类型转换配置
在EventsModel中添加$casts属性,让Laravel自动处理JSON字段与PHP数组的转换:
protected $casts = [ 'permissions' => 'array', // 其他需要转换的字段可在此添加 ];
配置后,Laravel会自动将数据库的JSON字段解析为PHP数组,保存时也会自动将数组转为JSON格式存入数据库。
- 修复数据库中的错误数据
由于当前permissions字段存储的是转义后的字符串而非原生JSON,需要先修正数据:
// 针对单条数据修复 $event = EventsModel::find(5); $event->permissions = json_decode($event->permissions, true); $event->save(); // 如果批量修复可使用 EventsModel::chunk(100, function ($events) { foreach ($events as $event) { if (is_string($event->permissions)) { $event->permissions = json_decode($event->permissions, true); $event->save(); } } });
- 简化代码逻辑
模型配置$casts后,$data->permissions已经是PHP数组,无需再手动json_decode,代码可简化为:
public function mount($data) { $this->data = $data; $this->selectedUsers = $data->permissions ?? []; }
- 检查属性名拼写
注意你代码中曾写dd($data->permission),这里属性名少了s,正确的应该是$data->permissions,拼写错误也会导致返回空值或空数组。
内容的提问来源于stack exchange,提问作者nguyenthanhson
相关产品推荐
相关产品推荐

