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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 17:25:20