对于Thinkphp5可能遇到的保存问题

最近在开发一个酒店小程序的项目,要求要批量修改日历价格,查询出所有的房间后修改的时候总是能保存某几条然后就终止了,代码如下

c 复制代码
 $cmodel = new \app\admin\model\booking\Calendar;
  // 查到对应的数据后进行保存到对应的日历价格里面
        foreach ($houseData as $item) {
            try {
               
                // 查找已有的数据,修改
                $calendar_data = $cmodel
                    ->where('house_id', $item->id)
                    ->where('day_time', $times)
                    ->find();
            
                if ($calendar_data) {
                    $result = $calendar_data->save(['price' => $params['price']]);
                } else {
                    $result = $cmodel->save([
                        'house_id' => $item->id,
                        'day_time' => $times,
                        'price' => $params['price']
                    ]);
                }
                
                if ($result !== false) {
                    $successCount++;
                } else {
                    $failCount++;
                }
            } catch (\Exception $e) {
                $failCount++;
                \think\Log::record('房间日历价格保存失败: 房间ID=' . $item->id . ', 错误=' . $e->getMessage(), 'error');
            }
        }

为题出在那里呢,正常也提示了修改了多少条数据,但是库里不改变。整体如果不注意的话感觉代码没问题,最终的问题就是因为初始话的cmodel,在循环外,在代码执行的时候cmodel,在循环外,在代码执行的时候cmodel,在循环外,在代码执行的时候cmodel存储的还是上一次的数据,所以就导致了问题的产生

c 复制代码
  // 查到对应的数据后进行保存到对应的日历价格里面
        foreach ($houseData as $item) {
            try {
                $cmodel = new \app\admin\model\booking\Calendar;
                // 查找已有的数据,修改
                $calendar_data = $cmodel
                    ->where('house_id', $item->id)
                    ->where('day_time', $times)
                    ->find();
            
                if ($calendar_data) {
                    $result = $calendar_data->save(['price' => $params['price']]);
                } else {
                    $result = $cmodel->save([
                        'house_id' => $item->id,
                        'day_time' => $times,
                        'price' => $params['price']
                    ]);
                }
                
                if ($result !== false) {
                    $successCount++;
                } else {
                    $failCount++;
                }
            } catch (\Exception $e) {
                $failCount++;
                \think\Log::record('房间日历价格保存失败: 房间ID=' . $item->id . ', 错误=' . $e->getMessage(), 'error');
            }
        }

虽然懂开发的人一般不会出现这样的问题,但是也是一个注意点,万一遇到呢 ............

相关推荐
数字新视界1 小时前
动环监控信创适配在智能机房管理中的应用价值与未来展望
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
爱和冰阔落1 小时前
【Linux网络】TCP 服务器如何并发处理多个客户端?从 fork、僵尸进程到双重 fork
linux·运维·服务器·网络
lisanmengmeng2 小时前
alertmanger 标签 rules 打上分组标签
linux·运维·服务器
Android系统攻城狮2 小时前
Linux FFmpeg深度解析之av_write_frame调用流程与实战(三十三)
linux·运维·服务器·ffmpeg·音视频进阶·ffmpeg音视频
上火的金鱼妹2 小时前
k8s生产实际问题排查(网关,数据库读写等)
运维·服务器
爱莉希雅&&&17 小时前
GitLab 完整学习笔记
linux·运维·服务器
陈希12319 小时前
Linux 服务器性能排查手册(2026):CPU、内存、磁盘IO、网络四大瓶颈定位
linux·服务器·网络
测试界的小码农1 天前
【Linux 命令实战(03):文件创建、复制、移动与删除,掌握 touch、mkdir、cp、mv、rm】
linux·服务器·php
|_⊙1 天前
网络层协议 IP
服务器·网络·tcp/ip
叼烟扛炮1 天前
Linux 学习笔记(六十):单线程的逆袭——epoll 高并发服务器实战
linux·服务器·网络·笔记·学习·算法