Laravel8查询结果转JSON时如何为所有值自动添加引号
Laravel 8 输出JSON时强制所有值为字符串、null转空字符串实现方法
实现思路
你需要在集合转JSON之前,对所有字段值做类型强制转换,将数字转为字符串、null转为空字符串,有两种常用实现方案:
方案1:集合批量处理(仅对当前查询生效,无全局影响)
直接在你的控制器代码中添加遍历转换逻辑即可:
// 原有查询逻辑不变 $tmpMenu = Menu::leftJoin('bookings', 'menus.date_menu', '=', 'bookings.date_reservation')->get(); // 新增处理逻辑:遍历所有字段强制转字符串 $processedMenu = $tmpMenu->map(function ($item) { $attributes = $item->toArray(); foreach ($attributes as $key => $value) { $attributes[$key] = (string) $value; } return $attributes; }); // 转JSON $finalTab2 = $processedMenu->toJson();
同时注意模板渲染的写法错误:你原来的代码中{{!! $finalTab2 !!}}外层多余的单引号会导致JSON语法错误,修改为:
events: {!! $finalTab2 !!},
方案2:模型属性转换(全局生效,所有该模型序列化场景都生效)
如果该规则需要对所有Menu、Booking模型的序列化结果生效,可以在模型中定义转换规则:
- 定义字段类型转换,将数值字段强制转为字符串
- 定义访问器,将null值自动转为空字符串
// app/Models/Menu.php 示例 class Menu extends Model { // 字段类型转换 protected $casts = [ 'id' => 'string', // 其他需要转字符串的数值字段依次添加 ]; // 为需要处理null的字段添加访问器 public function getDescriptionAttribute($value) { return (string) $value; } }
内容的提问来源于stack exchange,提问作者user3799115
相关产品推荐
相关产品推荐

