You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中JSON类型permissions字段读取返回空数组问题求助

解决Laravel中JSON字段返回空数组的问题

问题原因分析

从你提供的$data数据来看,permissions字段在数据库中实际存储的是转义后的JSON字符串("[{\"user_id\": \"6\"}]"),而非原生的JSON数组。同时你的模型大概率没有正确配置字段类型转换,或代码中存在属性名拼写错误,导致访问时返回空数组。

分步解决方案

  1. 修正模型的字段类型转换配置
    在EventsModel中添加$casts属性,让Laravel自动处理JSON字段与PHP数组的转换:
protected $casts = [
    'permissions' => 'array',
    // 其他需要转换的字段可在此添加
];

配置后,Laravel会自动将数据库的JSON字段解析为PHP数组,保存时也会自动将数组转为JSON格式存入数据库。

  1. 修复数据库中的错误数据
    由于当前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();
        }
    }
});
  1. 简化代码逻辑
    模型配置$casts后,$data->permissions已经是PHP数组,无需再手动json_decode,代码可简化为:
public function mount($data)
{
    $this->data = $data;
    $this->selectedUsers = $data->permissions ?? [];
}
  1. 检查属性名拼写
    注意你代码中曾写dd($data->permission),这里属性名少了s,正确的应该是$data->permissions,拼写错误也会导致返回空值或空数组。

内容的提问来源于stack exchange,提问作者nguyenthanhson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 21:30:54