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

Laravel操作SQL Server报错nvarchar转int类型失败如何解决?

问题根源

  1. 类型不匹配:你的数据库data字段定义为INT类型,但控制器中将表单提交的data数组直接执行json_encode转成了JSON字符串(比如你提交两个1就会得到["1","1"]),将字符串存入INT字段时SQL Server无法完成类型转换,直接触发报错。
  2. 插入逻辑不符合需求:你当前代码仅执行了一次Data::create操作,只会生成1条数据,完全不符合插入2条数据的需求。

修复方案

只需修改DataController.php中的store方法即可,无需调整其他现有业务结构:

方案1:单条循环插入(逻辑简单,适合小数据量场景)

public function store(StoreDataPost $request)
{
    // 遍历提交的data数组,逐个插入生成多条记录
    foreach ($request->get('data') as $item) {
        Data::create([
            'data' => intval($item) // 转成int类型匹配数据库字段
        ]);
    }
    // 后续补充你需要的返回逻辑即可
}

方案2:批量插入(性能更高,仅需1次SQL查询)

public function store(StoreDataPost $request)
{
    $insertData = array_map(fn($val) => ['data' => intval($val)], $request->get('data'));
    Data::insert($insertData);
}

额外注意点

你当前Data模型中定义的getDataAttribute访问器会在读取data字段时自动执行json_decode,但你存入的是INT类型的值,json_decode解析INT会返回null。如果该访问器是其他业务逻辑必备的,可调整为兼容模式:

public function getDataAttribute($value)
{
    $json = json_decode($value);
    return json_last_error() === JSON_ERROR_NONE ? $json : $value;
}

如果该访问器无其他用途可以直接删除,避免后续读取字段时得到异常值。

内容的提问来源于stack exchange,提问作者El conde Lucanor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 09:48:02