123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382 |
- <?php
- /**
- * NewCommonModel.php UTF-8
- * 新公共Model
- *
- * @date : 2020/3/23 11:16
- *
- * @license 这不是一个自由软件,未经授权不许任何使用和传播。
- * @author : wuyonghong <wyh@huosdk.com>
- * @version : HUOUNION 8.5
- */
- namespace huomp\model\common;
- use huolib\constant\CacheConst;
- use huolib\constant\CommonConst;
- use think\Cache;
- use think\db\exception\BindParamException;
- use think\Exception;
- use think\exception\PDOException;
- use think\Model;
- class NewCommonModel extends Model {
- protected $pk = 'id';
- // 关联模型过滤
- protected $relationFilter = [];
- //protected $table_cache_key_prefix = CacheConst::CACHE_TABLE_FIELD_PREFIX;
- protected $table_cache_key_prefix = '';
- /**
- * 懒人函数
- *
- * @access public
- *
- * @param string $string 字符串
- *
- * @return
- */
- public function strToArr($string) {
- return is_string($string) ? explode(',', $string) : (array)$string;
- }
- /**
- * 懒人函数
- *
- * @access public
- *
- * @param array $arr 数组
- *
- * @return string
- */
- public function arrToStr($arr) {
- return is_array($arr) ? implode(',', $arr) : (string)$arr;
- }
- /**
- * 计算在哪张表
- *
- * @return \Think\Model
- */
- public function computeTable() {
- return $this;
- }
- /**
- * @param $data
- * @param bool $replace
- * @param bool $get_last_insert_id
- *
- * @return bool|int|string
- */
- public function insertLog($data, $replace = false, $get_last_insert_id = true) {
- if ($_id = $this->computeTable()->insert($data, $replace, $get_last_insert_id)) {
- return $_id;
- } else {
- return false;
- }
- }
- /**
- * 添加数据
- *
- * @param array $data 需要添加的数据
- *
- * @return false|int 添加失败返回 false 添加成功 返回添加的ID
- */
- public function addData($data) {
- $this->checkField();
- if (empty($data)) {
- return false;
- }
- $_data = $data;
- $_model = new static();
- $_rs = $_model->allowField(true)->isUpdate(false)->save($_data, []);
- if (false !== $_rs) {
- return $_model->getLastInsID();
- }
- return false;
- }
- /**
- * 通过ID获取信息
- *
- * @param int $id 主键ID
- *
- * @return array|false
- */
- public function getInfoById($id) {
- $this->checkField();
- $_map[$this->pk] = $id;
- $_info = $this->useGlobalScope(false)->where($_map)->find();
- if (false === $_info) {
- return false;
- }
- if (is_object($_info)) {
- return $_info->toArray();
- } else {
- return $_info;
- }
- }
- /**
- * 更新数据
- *
- * @param array $data 数据
- * @param int|array $id 主集ID
- *
- * @return bool
- */
- public function updateData($data, $id) {
- $this->checkField();
- if (is_array($id)) {
- $_map[$this->pk] = ['in', $id];
- } else {
- $_map[$this->pk] = $id;
- }
- $_data = $data;
- $_model = new static();
- $_rs = $_model->allowField(true)->isUpdate(true)->save($_data, $_map);
- if (false === $_rs) {
- return false;
- } else {
- return true;
- }
- }
- /**
- * 删除数据
- *
- * @param array|int $ids ID合集
- * @param bool $is_complete 是否完成删除
- *
- * @return bool|int
- */
- public function deleteData($ids, $is_complete = false) {
- $this->checkField();
- if (true == is_array($ids)) {
- $_ids = $ids;
- } else {
- $_ids = [$ids];
- }
- $_map[$this->pk] = ['in', $_ids];
- if (true == $is_complete) {
- /* 彻底删除 */
- return $this->useGlobalScope(false)->where($_map)->delete();
- } else {
- $_data['is_delete'] = CommonConst::CONST_DELETED;
- $_data['delete_time'] = time();
- foreach ($_ids as $_id) {
- $_rs = self::updateData($_data, $_id);
- if (false === $_rs) {
- return false;
- }
- }
- return true;
- }
- }
- /**当前模型名称(数据库表名,不带前缀)
- *
- * @return string
- */
- public function getName() {
- return $this->name;
- }
- /**
- * 通过条件获取数量
- *
- * @param array $where 条件
- *
- * @return int
- */
- public function getCnt($where = []) {
- $_map = $where;
- $_cnt = $this->useGlobalScope(false)->where($_map)->count();
- if (empty($_cnt)) {
- return 0;
- }
- return $_cnt;
- }
- /**
- * 通过条件获取汇总
- *
- * @param string $field 字段
- * @param array $where 条件
- *
- * @return double
- */
- public function getSum($field, $where = []) {
- $_map = $where;
- $_sum = $this->useGlobalScope(false)->where($_map)->sum($field);
- if (false == $_sum) {
- return false;
- }
- return $_sum;
- }
- /**
- * 判断表中字段是否存在
- *
- * @param string $table 表名
- * @param string $column 字段名
- *
- * @return bool
- */
- public function isColumnExist($table, $column) {
- $_cache_key = $this->table_cache_key_prefix.strtolower($table.$column);
- $_data = Cache::get($_cache_key);
- if (1 == $_data) {
- return true;
- }
- $_has_it = false;//是否存在该字段
- $_columns = db()->getTableFields($table);
- if (!empty($_columns)) {
- foreach ($_columns as $_k => $_v) {
- if ($_v == $column) {
- $_has_it = true;
- break;
- }
- }
- }
- if (true == $_has_it) {
- /* 永不过期 */
- Cache::set($_cache_key, 1, CommonConst::CONST_MAX_INT);
- }
- return $_has_it;
- }
- /**
- * 校验字段
- *
- * @return bool
- */
- protected function checkField() {
- return true;
- }
- /**
- * 获取表名缓存
- *
- * @param string $table_name
- *
- * @return string
- */
- public function getTableCacheKey($table_name) {
- return $this->table_cache_key_prefix.strtolower($table_name);
- }
- /**
- * @param Exception $exception
- *
- * @param object $class 类
- * @param string $method 方法
- * @param array $arguments 参数
- *
- * @return mixed
- * @throws Exception
- */
- public function exception($exception, $class, $method = '', $arguments = []) {
- if (false !== strpos($exception->getMessage(), 'Base table or view not found')) {
- $this->isTableExist();
- $this->genDefaultData();
- return call_user_func_array([$class, $method], $arguments);
- }
- switch ($exception->getCode()) {
- case 10501:
- /* PDO异常处理 */
- case 10500:
- /* Database相关异常处理类 */
- case 10502:
- /* PDO参数绑定异常 */
- default:
- }
- throw $exception;
- }
- /**
- * 判断表中字段是否存在
- *
- * @param string $table 表名
- *
- * @return bool
- */
- public function isTableExist($table = '') {
- $_table_name = $table;
- if (empty($_table_name)) {
- $_table_name = $this->table;
- if (!empty($this->partition_field)) {
- $_table_name = $this->getPartitionTableName(
- $this->partition_data, $this->partition_field, $this->partition_rule
- );
- }
- }
- $_cache_key = $this->getTableCacheKey($_table_name);
- $_data = Cache::get($_cache_key);
- if (1 == $_data) {
- return true;
- }
- /* 不存在表 */
- $_has_it = false;
- try {
- $_table_cnt = db()->query(
- "SELECT COUNT(*) as table_cnt FROM information_schema.tables WHERE table_schema = '"
- .$this->connection['database']."' AND table_name = '".$_table_name."';"
- );
- if (!empty($_table_cnt) && !empty($_table_cnt[0]) && !empty($_table_cnt[0]['table_cnt'])) {
- $_has_it = true;
- } else {
- $_rs = $this->checkTable();
- if (false !== $_rs) {
- $_has_it = true;
- }
- }
- } catch (BindParamException $e) {
- $_has_it = false;
- } catch (PDOException $e) {
- $_has_it = false;
- }
- if (true == $_has_it) {
- /* 永不过期 */
- Cache::set($_cache_key, 1, 0);
- }
- return $_has_it;
- }
- /**
- * 生成数据
- */
- public function genDefaultData() {
- return true;
- }
- /**
- * 通过条件获取主键
- *
- * @param array $where 条件
- *
- * @return int
- */
- public function getPkId($where = []) {
- $_map = $where;
- try {
- $_pk_value = $this->useGlobalScope(false)->where($_map)->value($this->pk);
- if (empty($_pk_value)) {
- return 0;
- }
- return $_pk_value;
- } catch (Exception $e) {
- return $this->exception($e, $this, __FUNCTION__, func_get_args());
- }
- }
- }
|