模型的 save () 和 update () 出现偶尔存不了值的情况?
环境:
腾讯云
cpu:1核
内存: 2 GB
操作系统: CentOS 7.4 64位
当前使用带宽: 1Mbps
php 7.26
mysql 8.0.11
laravel 5.4
数据库配置文件 严谨模式 true 变 false
代码:
控制器方法:
public function orderUpload(Request $request){
if(!$request->session()->has('username'))
return redirect('timeOut')->with('error', '请先登录');
if($request->isMethod('post')){
// 验证是否已提交, 避免重复提交
$order_temp = new Order();
$temp = $order_temp->find($request->input('id'));
if($temp->order_status == 15 || $temp->order_status == 21 || $temp->order_status == 82)
return redirect('orderList')->with('error', '你的请求已提交, 请勿再此提交');
$arr = $request->input();
$order_obj = new Order();
$order = $order_obj->find($request->input('id'));
if($order->order_status == 14)
$res = $order_obj->saveStatus($request->input('id'),15);
elseif($order->order_status == 31)
$res = $order_obj->saveStatus($request->input('id'),32);
elseif($order->order_status == 34)
$res = $order_obj->saveStatus($request->input('id'),21);
elseif($order->order_status == 82)
$res = $order_obj->saveStatus($request->input('id'),71);
$file = $request->file('image');
if($file->isValid()){
$ext = $file->getClientOriginalExtension();
$path = $request->file('image')->storeAs('', date('Y',time()).'/'.$request->session()->get('code').date('YmdH').mt_rand(10, 99).'.'.$ext);
$arr['name'] = $path;
$image_obj = new OrderImage();
$image_res = $image_obj->add($arr);
// $res = $order->save();
if($res)
return redirect('orderList')->with('success', '图片上传成功!');
}else
return redirect('orderList')->with('error', '执行失败!');
}
}
模型:
public function saveStatus($id, $value){
return DB::table('order_main')->where('or_id', $id)->update(['order_status' => $value]);
}
现象:
用save()方法的时候
win7电脑提交, 图片和状态值都能修改并保存,
但是xp系统提交, 图片能上传, 状态值没有改变, 再次上传时, 状态值才改变. 换了360, 谷歌, 搜狗浏览器都是一样. 于是帮这台电脑换了win10系统. 问题一样存在
之后换update()
用update方法, 之前xp换win10的电脑, 图片能上传, 状态值能改, 测试之后这电脑的问题解决了
可是呢, 问题出现在win7系统的问题上. 图片能上传, 状态值偶尔有修改不成功的情况, 问题移到了其他地方
查看日志文件, 也没有出现错误信息
这问题怎么破啊.......
有哪位大神指点一下
2018/09/08
加了验证
public function orderUpload(Request $request){
if(!$request->session()->has('username'))
return redirect('timeOut')->with('error', '请先登录');
if($request->isMethod('post')){
// 验证是否已提交, 避免重复提交
$order_temp = new Order();
$temp = $order_temp->find($request->input('id'));
if($temp->order_status == 15 || $temp->order_status == 21 || $temp->order_status == 82)
return redirect('orderList')->with('error', '你的请求已提交, 请勿再此提交');
$arr = $request->input();
$order_obj = new Order();
$order = $order_obj->find($request->input('id'));
if($order->order_status == 14 || $order->order_status == '14')
$res = DB::update('update order_main set order_status= ? where or_id= ? ',[15,$request->input('id')]);
elseif($order->order_status == 31 || $order->order_status == '31')
$res = DB::update('update order_main set order_status= ? where or_id= ? ',[32,$request->input('id')]);
elseif($order->order_status == 34 || $order->order_status == '34')
$res = DB::update('update order_main set order_status= ? where or_id= ? ',[21,$request->input('id')]);
elseif($order->order_status == 82 || $order->order_status == '82')
$res = DB::update('update order_main set order_status= ? where or_id= ? ',[71,$request->input('id')]);
$file = $request->file('image');
if($file->isValid()){
// $res = $order->save();
$ext = $file->getClientOriginalExtension();
$path = $request->file('image')->storeAs('', date('Y',time()).'/'.$request->session()->get('code').date('YmdH').mt_rand(10, 99).'.'.$ext);
$arr['name'] = $path;
$image_obj = new OrderImage();
$order_res = DB::table('order_main')->where('or_id', [$request->input('id')])->first();
if($order_res->order_status == 15 || $order_res->order_status == 32 || $order_res->order_status == 71 || $order_res->order_status == '15' || $order_res->order_status == '32' || $order_res->order_status == '71')
$image_res = $image_obj->add($arr);
else
$image_res = false;
if($image_res)
return redirect('orderList')->with('success', '图片上传成功!');
else
return redirect('orderList')->with('error', '网络不通畅, 请重新再试!');
}else
return redirect('orderList')->with('error', '执行失败!');
}
}
又发现一个问题, 前一天的更改的状态值是由14更变到15, 第二天早上都是正常, 中午又变回14, 什么鬼情况.
并不是所有记录是这样, 是偶尔一两条数据是这样....
2018/09/12
将代码改成
public function orderUpload21(Request $request){
if(!$request->session()->has('username'))
return redirect('timeOut')->with('error', '请先登录');
if($request->isMethod('post')){
// 验证是否已提交, 避免重复提交
$arr = $request->input();
$file = $request->file('image');
if($file->isValid()){
$ext = $file->getClientOriginalExtension();
$path = $request->file('image')->storeAs('', date('Y',time()).'/'.$request->session()->get('code').date('YmdH').mt_rand(10, 99).'.'.$ext);
$arr['name'] = $path;
$image_obj = new OrderImage();
$order_obj = new Order();
$order = $order_obj->find($request->input('id'));
$order->order_status = 21;
$res = $order->save();
if(DB::table('order_main')->where('or_id', [$request->input('id')])->first()->order_status == 21)
$image_res = $image_obj->add($arr);
if($res)
return redirect('orderList')->with('success', '图片上传成功!');
else{
return redirect('orderList')->with('error', '网络部通畅, 请重新再试!');
}
}else
return redirect('orderList')->with('error', '执行失败!');
}
}
问题依然存在,
奇怪的是其他方法也有类似的逻辑, 就是这个方法会自动跳回修改之前的值
下面这段代码就没问题
public function delieryUpload(Request $request){
if(!$request->session()->has('username'))
return redirect('timeOut')->with('error', '请先登录');
if($request->isMethod('post')){
$file = $request->file('image');
if($file->isValid()){
$ext = $file->getClientOriginalExtension();
$path = $request->file('image')->storeAs('', date('Y',time()).'/'.$request->session()->get('code').date('YmdH').mt_rand(10, 99).'.'.$ext);
$arr = $request->input();
$arr['name'] = $path;
$image_obj = new OrderImage();
$res = $image_obj->add($arr);
$order_obj = new Order();
$order = $order_obj->find($arr['id']);
$deliery_obj = new OrderDeliery();
$deliery_obj->add($arr);
$order->order_status = 23;
$res = $order->save();
if($res)
return redirect('orderList')->with('success', '执行成功!');
else
return redirect('orderList')->with('error', '执行失败!');
}else{
return redirect('orderList')->with('error', '图片没有上传!');
}
}
}
困了我一个多月了.
百思不得其解
我猜会不会跟mysql 8.0有关, 修改了配置文件的严谨模式, 会不会跟这个有关
2018/09/21
换了阿里云
cpu:1核
内存: 2 GB
操作系统: CentOS 7.4 64位
当前使用带宽: 5Mbps
php 7.2
mysql 7.0
数据库配置文件修改回了严谨
其他不变
还是有跳回状态值14的情况, 但是明显少了很多, 现在预测也许是 new 了太多对象, 与php-fpm线程也有点关系
因为做了验证, 如果值没变是不允许添加图片名入数据库的,
如果是因为网络问题, 那图片是不可能上传的. 所有, 可以判断是添加了图片, 改了状态值15. 之后, 因内存或是框架的问题残留了之前的数据, 状态值被残留的数据还原了. 这也仅仅是猜测
推荐文章: