标签:时间间隔 插入 oom lse 函数 visible plain end sele
事务操作的写法告
批量插入,不应该是遍历插入。
public function setLive($data) { if (!$this->load($data,‘‘) && !$this->validate()) { return false; } if (empty($data[‘uid‘])) { $this->addError(‘errmsg‘,‘用户不存在‘); return false; } if (!is_array($this->spuarr) || empty($this->spuarr)) { $this->addError(‘errmsg‘,‘数据格式错误‘); return false; } if (strtotime($data[‘start_time‘])-time() < 600) { $this->addError(‘errmsg‘,‘开始直播时间与当前时间间隔需大于十分钟‘); return false; } if (strtotime($data[‘start_time‘]) > strtotime($data[‘end_time‘])) { $this->addError(‘errmsg‘,‘时间设置有误‘); return false; } if (strtotime($data[‘end_time‘]) - strtotime($data[‘start_time‘]) > 43200) { $this->addError(‘errmsg‘,‘直播时间不得大于12小时‘); return false; } $t = Yii::$app->db->beginTransaction(); //创建直播间 $model = new LiveRoom(); $addmsg = [ ‘uid‘=>$data[‘uid‘], ‘name‘=>$data[‘name‘], ‘img_url‘=>$data[‘img_url‘], ‘start_time‘=>$data[‘start_time‘], ‘end_time‘=>$data[‘end_time‘], ‘status‘=>0, ‘sw‘=>1, ‘coderate‘=>isset($data[‘coderate‘])?$data[‘coderate‘]:1800, ‘resolution‘=>isset($data[‘resolution‘])?$data[‘resolution‘]:‘1280*720‘, ‘framerate‘=>isset($data[‘framerate‘])?$data[‘framerate‘]:24 ]; $model->setAttributes($addmsg); if (!$model->save()) { $errmsg = [‘配置失败‘]; $err = $model->getErrors(); if (!empty($err)) { $errmsg = current($err); } //记录日志 CodeLog::createlog(‘配置直播间‘,$errmsg[0],‘/live/live-api/setlive‘); $t->rollBack(); $this->addError(‘errmsg‘,$errmsg[0]); return false; } $num = 1; //添加直播商品 foreach ($this->spuarr as $value) { $spu = new LiveSpu(); $spu->type = 1; $spu->spu_id = $value; $spu->live_id = $model->id; $spu->del_flag = 0; $spu->sort = $num; if (!$spu->save()) { $errmsg = [‘配置失败‘]; $err = $spu->getErrors(); if (!empty($err)) { $errmsg = current($err); } //记录日志 CodeLog::createlog(‘配置直播间1‘,$errmsg[0],‘/live/live-api/setlive‘); $t->rollBack(); $this->addError(‘errmsg‘,$errmsg[0]); return false; } $num++; } $t->commit(); return true; }
2.live 和 item 里:
(1)每次都核对token,现在是可以统一配置,无需核对token
(2) 查数据没有用searchApi,应该分为三个过程:判断传过来的参数,查数据,处理成返回的数据格式
4.获取id,name组成的键值对,可以用ArrayHelper::map(
$array
,
‘id‘
,
‘name‘
);
$model = self::find()->where([‘type‘=>$level,‘del_flag‘=>0])->orderBy([‘sort‘=>SORT_ASC]); $data = $model->select([‘id‘,‘title‘])->asArray()->all(); $menus = []; foreach ($data as $key=>$item) { $menus[$item[‘id‘]] = $item[‘title‘]; }
改为:
$arr = self::find()->select([‘id‘,‘title‘])->where([‘type‘=>$level,‘del_flag‘=>0])->orderBy([‘sort‘=>SORT_ASC])->asArray()->all(); $menu = ArrayHelper::map($arr,‘id‘,‘title‘);
位置:/shop/category-api/index
allCategory方法
优化后的代码更简洁,而且获取的是无线级别:
public static function allCategory($path=0){ $data = MeCategory::find()->select([‘id‘,‘title‘,‘type‘])->where([‘pid‘=>$path])->asArray()->all(); foreach($data as $key=>$val) { $son = MeCategory::allCategory($val[‘id‘]); if(!empty($son)) { $data[$key][‘son‘] = $son; } } return $data; }
位置:/shop/item-api/index
getList
(1)看不懂:
$vip = !isset($data[‘uid‘])? 1:UserData::find()->where([‘uid‘=>$data[‘uid‘]])->asArray()->one();
(2)把一些复杂的数据库处理过程封装成函数,让逻辑清楚起来
(3)不理解keyword模糊搜索功能:
不应该用中文分词吗?
为什么要用到uid?
位置:/shop/item-api/detail
getdetail
(1)性能优化:一条条查不如一起查;
if (isset($data[‘order_id‘])) { $collage_group = MeSpuGroup::find()->joinWith([‘group‘,‘u‘])->where([‘me_spu_group.id‘=>$order[‘collage_id‘]])->asArray()->one(); $model[‘collage_head_url‘][] = $collage_group[‘u‘][‘head_url‘]; if (!empty($collage_group[‘group‘])) { foreach ($collage_group[‘group‘] as $v) { $arr[] = $v[‘puid‘]; // $userData = UserData::find()->where([‘uid‘=>$v[‘puid‘]])->asArray()->one(); // $model[‘collage_head_url‘][] = $userData[‘head_url‘]; } $res = UserData::find()->select([‘head_url‘])->where([‘in‘,‘uid‘,$arr])->asArray()->all(); } }
/shop/cart-api/index getList 也是可读性很差,需要整理
/shop/cart-api/add
addcart 感觉少了个else,和continue
foreach ($data[‘sku_num‘] as $value) { //如果有同样规格商品,直接增加数量 $cart = MeCart::find()->where([‘uid‘=>$data[‘uid‘],‘sku_id‘=>$value[‘sku_id‘],‘del_flag‘=>0])->one(); if (!empty($cart)) { $cart->num += $value[‘num‘]; if (!$cart->save()) { $errmsg = [‘添加数量失败‘]; $msg = $cart->getErrors(); if (!empty($msg)) { $errmsg = current($msg); } $this->addError(‘errmsg‘,$errmsg[0]); return false; } continue; } //无同规格商品,新增 $model = new MeCart(); $model->sku_id = $value[‘sku_id‘]; $model->uid = $data[‘uid‘]; $model->num = $value[‘num‘]; $model->live_id = $live_id; //设置对应直播间编号 $model->del_flag = 0; if (!$model->save()) { $errmsg = [‘添加购物车失败‘]; $msg = $model->getErrors(); if (!empty($msg)) { $errmsg = current($msg); } $this->addError(‘errmsg‘,$errmsg[0]); return false; } }
改为:
foreach ($data[‘sku_num‘] as $value) { //如果有同样规格商品,直接增加数量 $cart = MeCart::find()->where([‘uid‘=>$data[‘uid‘],‘sku_id‘=>$value[‘sku_id‘],‘del_flag‘=>0])->one(); if (!empty($cart)) { $cart->num += $value[‘num‘]; if (!$cart->save()) { $errmsg = [‘添加数量失败‘]; $msg = $cart->getErrors(); if (!empty($msg)) { $errmsg = current($msg); } $this->addError(‘errmsg‘,$errmsg[0]); return false; } }else{ //无同规格商品,新增 $model = new MeCart(); $model->sku_id = $value[‘sku_id‘]; $model->uid = $data[‘uid‘]; $model->num = $value[‘num‘]; $model->live_id = $live_id; //设置对应直播间编号 $model->del_flag = 0; if (!$model->save()) { $errmsg = [‘添加购物车失败‘]; $msg = $model->getErrors(); if (!empty($msg)) { $errmsg = current($msg); } $this->addError(‘errmsg‘,$errmsg[0]); return false; } } continue; //!!!!!!!!!!111保证继续下次循环 }
10./floor/floor-block-api/index
getList 可读性差,需整理
(1)两层遍历里sql查询,需要优化
foreach($room_data as $k =>$v){ // var_dump($v[‘floorItems‘]);die(); foreach($v[‘floorItems‘] as $i =>$j){ // var_dump($j);die(); if($j[‘type‘]== 1){ $room_data[$k][‘floorItems‘][$i][‘titlename‘] = MeCategory::find()->where([‘id‘=>$j[‘param‘]])->one()->title; }elseif($j[‘type‘] == 2){ $room_data[$k][‘floorItems‘][$i][‘item_id‘] = MeSpu::find()->where([‘spu_id‘=>$j[‘param‘]])->one()->spu_id; } } }
可以先遍历,得到两个数组,然后再用in做sql查询
11./shop/item-api/second-kill
getList 45行 简化重复代码
if ($value[‘sec_time‘] < date(‘Y-m-d H:i:s‘) && $value[‘end_sec_time‘] > date(‘Y-m-d H:i:s‘)) { $value[‘status‘] = 2; //1:已结束2:抢购中3:即将开始 if ($num == 0) { $num++; $value[‘check‘] = $num; } } if ($value[‘sec_time‘] > date(‘Y-m-d H:i:s‘)) { $value[‘status‘] = 3; if ($num == 0) { $num++; $value[‘check‘] = $num; } } if ($value[‘end_sec_time‘] < date(‘Y-m-d H:i:s‘)) { $value[‘status‘] = 1; if ($num == 0) { $num++; $value[‘check‘] = $num; } }
改为:
if ($value[‘sec_time‘] < date(‘Y-m-d H:i:s‘) && $value[‘end_sec_time‘] > date(‘Y-m-d H:i:s‘)) { $value[‘status‘] = 2; //1:已结束2:抢购中3:即将开始 } if ($value[‘sec_time‘] > date(‘Y-m-d H:i:s‘)) { $value[‘status‘] = 3; } if ($value[‘end_sec_time‘] < date(‘Y-m-d H:i:s‘)) { $value[‘status‘] = 1; } if ($num == 0) { $num++; $value[‘check‘] = $num; }
标签:时间间隔 插入 oom lse 函数 visible plain end sele
原文地址:https://www.cnblogs.com/juanzhi/p/9822015.html