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

单次请求批量操作数据库记录时出现Trying to get property 'item' of non-object错误的求助

问题排查与解决方案

错误原因分析

你遇到的「Trying to get property 'item' of non-object」错误,是两个核心问题叠加导致的:

  1. 请求结构与代码逻辑不匹配:你的Postman发送的是单个包含subject_quiz_id和item数组的JSON对象,但控制器里却把它当成「对象数组」做外层foreach遍历——这会让你遍历到的第一个$key是字符串"7"(也就是subject_quiz_id的值),字符串不是对象,自然没法访问->item属性。
  2. 数组/对象访问语法混用:即便拿到正确的item数据,你用了对象访问符->去访问数组元素,PHP也会抛出异常,因为POST解析后的请求数据是关联数组,不是对象。

修正后的控制器代码

直接去掉多余的外层foreach,改用数组语法访问请求数据即可:

// 假设在Laravel环境中,先获取所有请求数据
$data = $request->all();

// 提取公共的subject_quiz_id
$subject_quiz_id = $data['subject_quiz_id'];

// 遍历item数组处理每条记录
foreach ($data['item'] as $attribute) {
    if ($attribute['action'] == 'store') {
        $insert_array = [
            'subject_quiz_id' => $subject_quiz_id,
            'registration_record_id' => $attribute['registration_record_id'],
            'mark' => $attribute['mark']
        ];
        // 记得执行实际的插入操作,比如:
        // YourScoreModel::create($insert_array);
    }
}

额外扩展场景

如果你确实需要批量处理多个测验的成绩(一次提交多个subject_quiz_id对应的记录),可以把Postman参数改成数组格式:

[
    {
        "subject_quiz_id": "7",
        "item": [{
            "action": "store",
            "registration_record_id": "7",
            "mark": "3"
        }]
    },
    {
        "subject_quiz_id": "8",
        "item": [{
            "action": "store",
            "registration_record_id": "9",
            "mark": "5"
        }]
    }
]

此时控制器的外层foreach才合理,但仍要使用数组语法:

foreach ($data as $key) {
    foreach ($key['item'] as $attribute) {
        if ($attribute['action'] == 'store') {
            $insert_array = [
                'subject_quiz_id' => $key['subject_quiz_id'],
                'registration_record_id' => $attribute['registration_record_id'],
                'mark' => $attribute['mark']
            ];
            // 执行插入操作
        }
    }
}

内容的提问来源于stack exchange,提问作者Mouhammad Talaa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 06:52:41