request = request(); } /** * 获取单条数据基类模型 * @param string $id * @param null $_op 模型链式对象 * @return array|Model|null * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ public function parentRead($id = '', $_op = null) { if (!is_object($_op)) { $_op = $this; } return $_op->where('site_id', SITE_ID)->find($id); } /** * 获取数据列表基类模型 * @param null $_op 模型链式对象 * @param int $ispage 是否分页,默认分页 * @return array|\think\Collection * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ protected function parentLists($_op = null, $ispage = 1,$issite=true) { //模型对象为空,设定默认查询对象 if($issite){ if (!is_object($_op) || empty($_op)) { $_op = $this->where('site_id', SITE_ID); //没有默认where查询 这个一定要 否则获取不到下面的getOptions查询条件值 } else { $_op->where('site_id', SITE_ID); //强制绑定站点参数 } } //公共搜索查询 if (count($this->search_arr) > 0) { $_param = request()->param(); //搜索参数集合 $_op->where(function ($query) use ($_param) { foreach ($this->search_arr as $k => $v) { $search_arr = explode(':', $v); $search_name = $search_arr[0]; $logic = $search_arr[1] ?? 'AND'; if (array_key_exists($search_name, $_param)) { if (!empty($_param[$search_name])) { $query->whereLike($search_name, "%{$_param[$search_name]}%", $logic); } } } }); } //执行分页查询 $page = $this->request->param('page', config('page')); $limit = $this->request->param('limit', config('limit')); $count = $_op->count(); $this->listsOrder($_op); //统一排序 //无分页判断 $ispage != 1 ?: $_op->page((int)$page, (int)$limit); $_data = [ 'data' => $_op->select()->toArray(), 'page_total' => $count, ]; return $_data; } /** * 数据排序 */ private function listsOrder(&$_op) { if ($_op->getOptions('order')) { return; } $sort = $this->request->get('sort'); $sort = in_array($sort, $this->checkAllowFields()) ? $sort : ''; $order = $this->request->get('order', 'DESC', 'strtoupper') == 'ASC' ? 'ASC' : 'DESC'; $sort_order = $sort . ' ' . $order; if (empty($sort)) { $sort_order = in_array('sort', $this->checkAllowFields()) ? 'sort DESC,create_time DESC' : 'create_time DESC'; } $_op->order($sort_order); } /** * 新增数据基类模型 * @param array $_param * @return Common|Model */ public function parentAdd($_param = []) { if (empty($_param)) { $_param = $this->request->post(); } $_param['site_id'] = SITE_ID; $_result = self::create($_param); return $_result->id; } /** * 修改基类模型 * @param array $_data * @param null $_op 模型链式对象 * @param $id * @return bool|\type * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ public function parentEdit($_data = [], $id = 0, $_op = null) { if (empty($_data)) { $_data = $this->request->param(); } if (!is_object($_op)) { $_op = $this; } $_op = $_op->where('site_id', SITE_ID)->find($id); if (empty($_op)) { return send_http_status('', 101); } $_data['site_id'] = SITE_ID; //防止篡改站点 return $_op->save($_data); } /** * 删除 * @param $id * @param null $_op 模型链式对象 * @param false $true_delete 是否真删除 默认软删除 * @return bool|\type * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ public function parentDel($id, $_op = null, bool $true_delete = false) { if (!is_object($_op)) { $_op = $this; } $ids = explode(',', $id); $_op = $_op->where('id', 'in', $ids)->where('site_id', SITE_ID)->select(); if ($_op->isEmpty()) { return send_http_status('', 101); } return self::destroy($ids, $true_delete); //TP软删除 } /** * 更改数据状态 * @param $id * @param $status * @param null $_op * @return \type * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ public function parentStatus($id, $status, $_op = null) { if (!is_object($_op)) { $_op = $this; } $ids = explode(',', $id); $_op = $_op->where('id', 'in', $ids)->where('site_id', SITE_ID)->select(); if ($_op->isEmpty()) { return send_http_status('', 101); } $_where = [ ['id', 'in', $ids], ['site_id', '=', SITE_ID], ]; // $affected = self::where('id', 'in', $ids)->where('site_id', SITE_ID)->update(['status' => $status]); $affected = self::update(['status' => $status], $_where); return $affected; } public static function onAfterRead(Model $model) { $model->offsetUnset('delete_time'); } public static function onBeforeWrite(Model $model) { //以下参数禁止新增或更改 $model->setAttr('copy_safe_id', (int)$model->getAttr('id')); //设定副本参数 $model->setAttr('copy_safe_site_id', (int)$model->getAttr('site_id')); //设定副本参数 $model->offsetUnset('id'); $model->offsetUnset('site_id'); $model->offsetUnset('delete_time'); $model->offsetUnset('update_time'); $model->offsetUnset('create_time'); } public static function onAfterWrite(Model $model) { //增加创建和修改日志记录 ActionLog::getInstance()->write($model->getData(), $model->getOrigin(), $model->getLastSql()); } public static function onAfterDelete(Model $model) { //增加删除日志记录 ActionLog::getInstance()->write($model->getData(), [], $model->getLastSql()); } }