1.時間的判斷,還有就是在php這邊如何去拿前端html元素上面的值
input('$row.borrowtime');
// 創建兩個 DateTime 對象$row_expecttime = new \DateTime(input('$row.borrowtime'));$par_expecttime = new \DateTime( $params['expecttime']);
// // 計算兩個日期之間的差異
// $diff = $par_expecttime->diff($row_expecttime);// 計算總的天數差異$totalDays = $par_expecttime->diff($row_expecttime);if ($totalDays->invert == 0){$this->error('續借時間不能小于原歸還時間');}if ($totalDays->m >= 7){$this->error('借閱總時間最多不能超過7個月');}
2.批量存儲數據的2中方法
2.1第一種數據量不大的話,就直接分別放到數組,然后一起sevaAll()一起存了算了
$books_ids = explode(',', $params['books_id']);if(count($books_ids)>3){$this->error('一次最多不超過3本圖書');}// print_r($params);$result = false;Db::startTrans();try {//是否采用模型驗證if ($this->modelValidate) {$name = str_replace("\\model\\", "\\validate\\", get_class($this->model));$validate = is_bool($this->modelValidate) ? ($this->modelSceneValidate ? $name . '.add' : $name) : $this->modelValidate;$this->model->validateFailException()->validate($validate);}if(count($books_ids)>1){$seva_data = [];foreach ($books_ids as $key => $value) {$params['books_id'] = $value;$params['bookstatus']= Db::name('books')->where('id','=',$value)->value('status');
// print_r($params);$seva_data[] = $params;}
// print_r($seva_data);$result = $this->model->allowField(true)->saveAll($seva_data);if (!$result){throw new \Exception('圖書'.$params['books_id'].'狀態更新失敗');}Db::commit();}else{$params['bookstatus']= Db::name('books')->where('id','=',$params['books_id'])->value('status');
// print_r($params);$result = $this->model->allowField(true)->save($params);if (!$result){
// $res = Books::where('id','=',$params['books_id'])->where('status',1)->update(['status'=>2]);
// if (!$res){throw new \Exception('圖書'.$params['books_id'].'狀態更新失敗');
// }}Db::commit();}} catch (ValidateException|PDOException|Exception $e) {Db::rollback();$this->error($e->getMessage());}if ($result === false) {$this->error(__('No rows were inserted'));}$this->success();
2.2如果數據量大的話,那么就選擇用foreach循環一條一條的存,但是會有個問題就是model要放到循環里面去
$books_ids = explode(',', $params['books_id']);if(count($books_ids)>3){$this->error('一次最多不超過3本圖書');}$diff = strtotime($params['expecttime']) - strtotime($params['borrowtime']);if($diff > 180*24*3600){$this->error('借書時間不能超過180天');}else if($diff < 24*3600){$this->error('借書時間不能少于1天');}$result = false;Db::startTrans();try {//是否采用模型驗證if ($this->modelValidate) {$name = str_replace("\\model\\", "\\validate\\", get_class($this->model));$validate = is_bool($this->modelValidate) ? ($this->modelSceneValidate ? $name . '.add' : $name) : $this->modelValidate;$this->model->validateFailException()->validate($validate);}if(count($books_ids)>1){foreach ($books_ids as $key => $value) {$dt = $params;$dt['books_id'] = $value;$model = new \app\admin\model\read\Borrow;$result = $model->allowField(true)->save($dt);if ($result){$res = Books::where('id','=',$dt['books_id'])->where('status',1)->update(['status'=>2]);if (!$res){throw new \Exception('圖書'.$dt['books_id'].'狀態更新失敗');}}}}else{$result = $this->model->allowField(true)->save($params);if ($result){$res = Books::where('id','=',$params['books_id'])->where('status',1)->update(['status'=>2]);if (!$res){throw new \Exception('圖書'.$params['books_id'].'狀態更新失敗');}}}Db::commit();} catch (ValidateException|PDOException|Exception $e) {Db::rollback();$this->error($e->getMessage());}if ($result === false) {$this->error(__('No rows were inserted'));}$this->success();
3.數據庫的關聯查詢
$oldData = $this->model->with('books')->where('books_id' ,'in',$books_ids)->where('subscription.status','=','1')->select();// $jsonData = json_encode($oldData, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); // 格式化 JSON 輸出
// print_r($jsonData);if ($oldData){$titles = array_map(function ($item){return $item['books']['name'];},$oldData);$this->error('已經在預約中不能重復預約:'.implode(",",$titles));}
4.用fastadmin自帶的郵件系統發郵件
4.1進入到api里面可以自己,自定義一個api
4.2具體郵件類的封裝是在下圖的目錄下,可以自己去找然后看里面的注釋