最近在开发一个酒店小程序的项目,要求要批量修改日历价格,查询出所有的房间后修改的时候总是能保存某几条然后就终止了,代码如下
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');
}
}
虽然懂开发的人一般不会出现这样的问题,但是也是一个注意点,万一遇到呢 ............