Laravel数据表格获取数组列输出时移除CONINET_ID字段引号的方法
Laravel 移除数据表格CONINET_ID列双引号包裹实现方案
问题现状
当前数据表格CONINET_ID列输出内容被[""]符号包裹,无法正常展示纯ID值,相关现有代码与效果如下:
- 表格实际展示效果:

- 对应Blade模板代码:
@table([ 'id' => 'Persons.index', 'xhr' => route('api.manage-dup-api'), 'ns' => 'PersonsIndex', 'columns' => $columns ?? [], 'filters' => $filterTable ?? [], 'params' => [ 'filters_live' => false, 'selectable' => true, 'toolbar_style' => 'fixed' ] ])
- 接口查询逻辑代码:
$q->with('user') ->with('user.roles') ->select( 'persons.*', 'birth->date as birthdate' )->whereIn('id', $id)->orWhereIn('old_id_CONINET', $coninet_ids); return $this->outputList($q, $request);
问题原因
该问题本质是old_id_CONINET字段在数据库中为JSON类型,Eloquent默认会将JSON类型字段解析为数组结构,接口输出JSON序列化时,单值数组就会被格式化为["实际ID值"]的样式,导致前端展示带多余符号。
可行方案
以下三种方案任选其一即可,优先推荐第一种,改动最小性能最优:
方案1:查询阶段直接取出JSON字段原始字符串
修改查询的select逻辑,通过数据库原生函数直接解析JSON字段为纯字符串返回,从源头避免数组序列化问题:$q->with('user') ->with('user.roles') ->select( 'persons.*', 'birth->date as birthdate', // MySQL数据库用下面这行 \DB::raw('JSON_UNQUOTE(old_id_CONINET) as CONINET_ID') // 如果是PostgreSQL数据库,替换为下面这行 // \DB::raw('old_id_CONINET->>0 as CONINET_ID') )->whereIn('id', $id)->orWhereIn('old_id_CONINET', $coninet_ids); return $this->outputList($q, $request);方案2:模型层配置字段转换
在Person模型中通过$casts属性或访问器,自动处理字段输出格式:
方式一:直接将字段转换为字符串类型// app/Models/Person.php 内添加 protected $casts = [ // 其余原有字段转换配置保留 'old_id_CONINET' => 'string', ];方式二:如果字段可能存多值,用访问器拼接为字符串
// app/Models/Person.php 内添加 public function getOldIdCONINETAttribute($value) { $decoded = json_decode($value, true); return is_array($decoded) ? implode(',', $decoded) : $value; }方案3:前端表格列渲染时格式化
不想修改后端逻辑的话,可以在定义$columns表格列配置时,给CONINET_ID列添加自定义渲染逻辑,输出时过滤掉多余符号:$columns = [ // 其余列配置保留 [ 'field' => 'CONINET_ID', 'title' => 'CONINET_ID', 'render' => function($row) { return is_array($row->CONINET_ID) ? $row->CONINET_ID[0] : trim($row->CONINET_ID, '[]"'); } ] ];
内容的提问来源于stack exchange,提问作者Umar Farooq
相关产品推荐
相关产品推荐

