如何在Symfony控制器中创建模型类及处理Doctrine查询数值类型
如何在Symfony控制器中创建模型类并转换查询结果的数值类型
步骤1:创建模型类
在src/Model目录下新建模型类,封装字段类型转换逻辑,方便后续复用和维护:
// src/Model/EmployeeAdjustment.php namespace App\Model; class EmployeeAdjustment { public string $empName; public int $adjustment; public int $byDays; public int $mos; public int $byMos; public int $yrs; public int $byYrs; /** * 从数据库查询数组转换为模型对象 */ public static function fromArray(array $data): self { $model = new self(); $model->empName = $data['emp_name']; $model->adjustment = (int)$data['adjustment']; $model->byDays = (int)$data['by_days']; $model->mos = (int)$data['mos']; $model->byMos = (int)$data['by_mos']; $model->yrs = (int)$data['yrs']; $model->byYrs = (int)$data['by_yrs']; return $model; } /** * 转换为符合输出格式的数组 */ public function toArray(): array { return [ 'emp_name' => $this->empName, 'adjustment' => $this->adjustment, 'by_days' => $this->byDays, 'mos' => $this->mos, 'by_mos' => $this->byMos, 'yrs' => $this->yrs, 'by_yrs' => $this->byYrs, ]; } }
步骤2:在控制器中使用模型类转换结果
修改控制器代码,将查询到的数组结果映射到模型对象,再输出带有正确数值类型的数组:
// MyManualController.php use App\Model\EmployeeAdjustment; // ... $mCC = $this->getDoctrine()->getManager(); $qCC = "CONFLICT QUERY HERE..."; $xCC = $mCC->getConnection()->prepare($qCC); $xCC->execute(); $sCC = $xCC->fetchAll(); // 转换查询结果为带正确数值类型的数组 $formattedResults = array_map(function($item) { return EmployeeAdjustment::fromArray($item)->toArray(); }, $sCC); // 返回JSON响应,此时数值字段已转为int类型 return $this->json($formattedResults);
替代方案:直接在控制器处理类型转换
如果不需要复用转换逻辑,也可以直接在控制器中处理数组,无需创建模型类:
$formattedResults = array_map(function($item) { return [ 'emp_name' => $item['emp_name'], 'adjustment' => (int)$item['adjustment'], 'by_days' => (int)$item['by_days'], 'mos' => (int)$item['mos'], 'by_mos' => (int)$item['by_mos'], 'yrs' => (int)$item['yrs'], 'by_yrs' => (int)$item['by_yrs'], ]; }, $sCC);
说明
- 模型类的优势在于封装类型转换逻辑,后续字段变更时只需修改模型,避免在多个控制器中重复编写转换代码。
- 使用
(int)强制转换字符串为整数,适用于确定为数值格式的字段;如果字段可能为空或非数值,可添加额外的判断逻辑(比如is_numeric()校验)。
内容的提问来源于stack exchange,提问作者Tark13
相关产品推荐
相关产品推荐

