From dd05c100bb01847653c1ac7fbc615cc89840c489 Mon Sep 17 00:00:00 2001 From: Anyon Date: Tue, 20 Jun 2017 12:13:55 +0800 Subject: [PATCH] =?UTF-8?q?[=E6=9B=B4=E6=96=B0]=E4=BC=98=E5=8C=96=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E6=9C=8D=E5=8A=A1=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- extend/service/DataService.php | 71 +++++++++++++--------------------- 1 file changed, 26 insertions(+), 45 deletions(-) diff --git a/extend/service/DataService.php b/extend/service/DataService.php index ad207e578..98fcffdac 100644 --- a/extend/service/DataService.php +++ b/extend/service/DataService.php @@ -15,6 +15,7 @@ namespace service; use think\Db; +use think\Request; /** * 基础数据服务 @@ -45,14 +46,16 @@ class DataService { public static function createSequence($length = 10, $type = 'SYSTEM') { $times = 0; while ($times++ < 10) { - $sequence = ''; $i = 0; + $sequence = ''; while ($i++ < $length) { $sequence .= ($i <= 1 ? rand(1, 9) : rand(0, 9)); } $data = ['sequence' => $sequence, 'type' => strtoupper($type)]; - if (Db::name('SystemSequence')->where($data)->count() < 1 && Db::name('SystemSequence')->insert($data)) { - return $sequence; + if (Db::name('SystemSequence')->where($data)->count() < 1) { + if (Db::name('SystemSequence')->insert($data) !== false) { + return $sequence; + } } } return null; @@ -62,40 +65,17 @@ class DataService { * 数据增量保存 * @param \think\db\Query|string $dbQuery 数据查询对象 * @param array $data 需要保存或更新的数据 - * @param string $upkey 条件主键限制 + * @param string $key 条件主键限制 * @param array $where 其它的where条件 * @return bool */ - public static function save($dbQuery, $data, $upkey = 'id', $where = []) { + public static function save($dbQuery, $data, $key = 'id', $where = []) { $db = is_string($dbQuery) ? Db::name($dbQuery) : $dbQuery; - $fields = $db->getTableFields(['table' => $db->getTable()]); - $_data = []; - foreach ($data as $k => $v) { - in_array($k, $fields) && ($_data[$k] = $v); + $where[$key] = isset($data[$key]) ? $data[$key] : ''; + if ($db->where($where)->count() > 0) { + return $db->where($where)->update($data) !== false; } - if (self::_apply_save_where($db, $data, $upkey, $where)->count() > 0) { - return self::_apply_save_where($db, $data, $upkey, $where)->update($_data) !== FALSE; - } - return self::_apply_save_where($db, $data, $upkey, $where)->insert($_data) !== FALSE; - } - - /** - * 应用 where 条件 - * @param \think\db\Query|string $db 数据查询对象 - * @param array $data 需要保存或更新的数据 - * @param string $upkey 条件主键限制 - * @param array $where 其它的where条件 - * @return \think\db\Query - */ - protected static function _apply_save_where(&$db, $data, $upkey, $where) { - foreach (is_string($upkey) ? explode(',', $upkey) : $upkey as $v) { - if (is_string($v) && array_key_exists($v, $data)) { - $db->where($v, $data[$v]); - } elseif (is_string($v)) { - $db->where("{$v} IS NULL"); - } - } - return $db->where($where); + return $db->insert($data) !== false; } /** @@ -105,23 +85,24 @@ class DataService { * @return bool|null */ public static function update(&$dbQuery, $where = []) { + $request = Request::instance(); $db = is_string($dbQuery) ? Db::name($dbQuery) : $dbQuery; - $ids = explode(',', input("post.id", '')); - $field = input('post.field', ''); - $value = input('post.value', ''); + $ids = explode(',', $request->post('id', '')); + $field = $request->post('field', ''); + $value = $request->post('value', ''); $pk = $db->getPk(['table' => $db->getTable()]); - $db->where(empty($pk) ? 'id' : $pk, 'in', $ids); - !empty($where) && $db->where($where); - // 删除模式 + $where[empty($pk) ? 'id' : $pk] = ['in', $ids]; + // 删除模式,如果存在 is_deleted 字段使用软删除 if ($field === 'delete') { - $fields = $db->getTableFields(['table' => $db->getTable()]); - if (in_array('is_deleted', $fields)) { - return false !== $db->update(['is_deleted' => 1]); + if (method_exists($db, 'getTableFields')) { + if (in_array('is_deleted', $db->getTableFields(['table' => $db->getTable()]))) { + return false !== $db->where($where)->update(['is_deleted' => 1]); + } } - return false !== $db->delete(); + return false !== $db->where($where)->delete(); } - // 更新模式 - return false !== $db->update([$field => $value]); + // 更新模式,更新指定字段内容 + return false !== $db->where($where)->update([$field => $value]); } -} +} \ No newline at end of file