模型基类

框架中有两个模型基类:extend/ky/BaseModel 和 application/common/model/Base


BaseModel.php结构如下:

namespace ky;
use think\Db;
use think\db\Where;
use think\Model;

class BaseModel extends Model
{
    /**
     * 默认主键
     * @var string
     */
    protected $pk = 'id';
    //是否开启默认写入时间字段
    protected $autoWriteTimestamp = true;
    // 创建时间字段,无填null
    protected $createTime = 'create_time';
    // 更新时间字段,无填null
    protected $updateTime = 'update_time';

    /**
     * 是否开启缓存
     * @var bool
     */
    protected $isCache = false;
    /**
     * 缓存tag
     * @var string
     */
    protected $cacheTag = '';
    /**
     * 缓存时间
     * @var int
     */
    protected $expire = 3600;
    /**
     * 水平分表规则
     * @var array
     */
    protected $rule = [];
    /**
     * 分表字段
     * @var string
     */
    protected $key = '';

    public function __construct($data = [])
    {
        parent::__construct($data);
    }

    /**
     * 根据条件和排序获取单条数据
     * @param array $params
     * @return array|false|\PDOStatement|string|Model
     * @throws \think\exception\DbException
     * @Author: fudaoji <fdj@kuryun.cn>
     */
    public function getOneByOrder($params = []){}

    /**
     * 根据条件删除数据
     * @param array $map
     * @return int
     * @throws \think\Exception
     * @throws \think\exception\PDOException
     * @throws \Exception
     */
    public function delByMap($map = []){}

    /**
     * 设置临时缓存状态
     * @param bool $v
     * @return $this
     * @author: fudaoji<fdj@kuryun.cn>
     */
    public function setCache($v = false){}

    /**
     * 查询某个时间段的count统计
     * @param array $params
     * @return mixed
     * @Author  Doogie<461960962@qq.com>
     * @throws \Exception
     */
    public function totalByTime($params = []){}

    /**
     * 根据主键获取单个数据
     * @param int $pk
     * @param int $refresh
     * @return mixed
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     * @Author  Doogie<461960962@qq.com>
     */
    public function getOne($pk = 0, $refresh = 0){}

    /**
     * 新增单条数据
     * @param array $data
     * @return bool|mixed
     * @throws \think\Exception
     * @Author  Doogie<461960962@qq.com>
     */
    public function addOne($data = []){}

    /**
     * 批量添加
     * @param array $arr
     * @return bool
     * @Author: fudaoji<fdj@kuryun.cn>
     * @throws \think\Exception
     */
    public function addBatch($arr = []){}

    /**
     * 更新单条数据
     * @param array $data
     * @return bool|mixed
     * @throws \think\Exception
     * @throws \think\exception\PDOException
     * @Author  fudaoji<fdj@kuryun.cn>
     */
    public function updateOne($data = []){}

    /**
     * 根据条件更新数据
     * @param array $where
     * @param array $data
     * @return bool|mixed
     * @throws \think\Exception
     * @throws \think\exception\PDOException
     * @author: fudaoji<fdj@kuryun.cn>
     */
    public function updateByMap($where = [], $data = []){}

    /**
     * 批量修改数据
     * @param $arr
     * @return bool
     * @throws \think\Exception
     * @throws \think\exception\PDOException
     */
    public function updateBatch($arr){}

    /**
     * 根据主键删除单个数据
     * @param int $pk
     * @return bool
     * @throws \think\Exception
     * @throws \think\exception\PDOException
     */
    public function delOne($pk=0){}

    /**
     * 批量删除
     * @param array $pk_arr
     * @return bool
     * @throws \think\Exception
     * @throws \think\exception\PDOException
     */
    public function delBatch($pk_arr=[]){}

    /**
     * 自带的分页
     * @param $where
     * @param $order
     * @param $page_size
     * @param mixed $field
     * @param $refresh
     * @return mixed
     * @auth Doogie<461960962@qq.com>
     * @throws \think\exception\DbException
     */
    public function page($page_size=10, $where=[], $order=[], $field = true, $refresh=0){}

    /**
     * 获取分页数据
     * @param array $limit
     * @param array $where
     * @param array $order
     * @param bool|true $field
     * @param int $refresh
     * @return mixed
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     * @Author  Doogie<461960962@qq.com>
     */
    public function getList($limit = [], $where = [], $order = [], $field = true, $refresh = 0){}

    /**
     * count统计
     * @param array $where
     * @param int $refresh
     * @return mixed
     * @Author  Doogie<461960962@qq.com>
     */
    public function total($where = [], $refresh = 0){}

    /**
     * 获取某些字段
     * @param string $field
     * @param array $query
     * @param int $refresh
     * @return array
     * @Author  Doogie<461960962@qq.com>
     */
    public function getField($field = '', $query = [],$refresh = 0){}

    /**
     * 条件链接器
     * @param $self
     * @param array $where
     * @Author: Doogie <461960962@qq.com>
     * @return BaseModel
     */
    private function _where(&$self, $where=[]){}

    /**
     * 根据条件获取单条数据
     * @param array $where
     * @param $field
     * @param int $refresh
     * @param array $order 排序获取
     * @return array|false|\PDOStatement|string|Model
     * @throws \think\exception\DbException
     * @Author: fudaoji <fdj@kuryun.cn>
     */
    public function getOneByMap($where=[], $field = true, $refresh = 0, $order = []){}

    /**
     * 获取builder,兼容分表
     * @param array $query
     * @return $this|\think\db\Query
     * @Author: Doogie <461960962@qq.com>
     */
    public function getBuilder($query = []){}

    /**
     * 获取真正的表名
     * @param array $query
     * @return mixed
     * @Author: Doogie <461960962@qq.com>
     */
    public function getTrueTable($query = []){}
    }

    /**
     * 获取真实id值
     * @param array $query
     * @return array
     * @Author: Doogie <461960962@qq.com>
     */
    public function getId($query = []){}

    /**
     * 根据条件获取数据
     * @param array $params
     * @return mixed
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     * @author: Doogie<461960962@qq.com>
     */
    public function getAll($params){}

    /**
     *根据某个字段不重复获取数据
     * @param string $field 字段
     * @param array $where
     * @param int $refresh
     * @return mixed
     * @Author  Doogie<461960962@qq.com>
     */
    public function distinctField($field = '', $where = [], $refresh = 0){}

    /**
     * 获取group by结果列表
     * @param array $params 参数
     * @return mixed
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     * @author: Doogie<461960962@qq.com>
     */
    public function getGroupList($params = []){}

    /**
     * sum求和
     * @param string $field
     * @param array $where
     * @param int $refresh
     * @return int $data
     * @author Jason<1589856452@qq.com>
     */
    public function sums($field = '', $where = [], $refresh = 0) {}

    /**
     * 获取有联合查询的分页数据
     * @param array $params
     * @return mixed
     * e.g: model('activity')->getListJoin([
     * 'alias' => 'a',
     * 'join' => [[config('database.prefix').'user u', 'a.user_id=u.id', 'left']],
     * 'limit' => [1, 100],
     * 'where' => ['a.id' => ['gt', 300]],
     * 'field' => 'u.username,a.id as activity_id',
     * 'order' => ['a.id' => 'desc']
     * ]);
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     * @Author  Doogie<461960962@qq.com>
     */
    public function getListJoin($params = []){}

    /**
     * 获取关联查询所有数据
     * @param array $params
     * @return mixed
     * e.g: model('activity')->getAllJoin([
     * 'alias' => 'a',
     * 'join' => [[config('database.prefix').'user u', 'a.user_id=u.id', 'left']],
     * 'where' => ['a.id' => ['gt', 300]],
     * 'field' => 'u.username,a.id as activity_id',
     * 'order' => ['a.id' => 'desc']
     * ]);
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     * @author Jason<dcq@kuryun.cn>
     */
    public function getAllJoin($params = []){}

    /**
     * 获取多表关联统计数据
     * @param array $params
     * @return mixed
     * e.g: model('activity')->totalJoin([
    'alias' => 'a',
    'join' => [[config('database.prefix').'user u', 'a.user_id=u.id', 'left']],
    'where' => ['a.id' => ['gt', 300]]
    ]);
     * @author Jason<dcq@kuryun.cn>
     */
    public function totalJoin($params = []){}

    /**
     * 获取有联合查询的分页数据
     * @param array $params
     * @return mixed
     * e.g: model('activity')->pageJoin([
     * 'alias' => 'a',
     * 'join' => [[config('database.prefix').'user u', 'a.user_id=u.id', 'left']],
     * 'page_size' => 20,
     * 'where' => ['a.id' => ['gt', 300]],
     * 'field' => 'u.username,a.id as activity_id',
     * 'order' => ['a.id' => 'desc']
     * ]);
     * @Author  Doogie<461960962@qq.com>
     * @throws \think\exception\DbException
     */
    public function pageJoin($params = []){}

    /**
     * 获取group by结果
     * @param array $params 参数
     * @return mixed
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     * @author: Doogie<461960962@qq.com>
     */
    public function getGroupAll($params = []){}

    /**
     * 获取单条数据的关联查询
     * @param array $params
     * @return mixed
     * e.g: model('user')->getOneJoin([
     * 'alias' => 'u',
     * 'join' => [['profile p', 'p.user_id=u.id']],
     * 'where' => ['u.id' => 1]
     * ]);
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     * @author fudaoji<fdj@kuryun.cn>
     */
    public function getOneJoin($params = []){}
    
    /**
     * 获取分组统计数据
     * @param array $params
     * @return mixed
     * e.g: model('activity')->totalGroup([
    'where' => ['a.id' => ['gt', 300]],
    'group' => 'activity.id',
    'having' => 'activity.id > 100',
     'refresh' => 1
    ]);
     * @author fudaoji<fdj@kuryun.cn>
     */
    public function totalGroup($params = []){}
}


Base.php结构如下:

namespace app\common\model;

use ky\BaseModel;

class Base extends BaseModel
{
    /**
     * 手动设置分表key,因为多表关联查询时会有表别名,因此需要临时修改分表key
     * Author: fudaoji<fdj@kuryun.cn>
     * @param string $key
     * @return \ky\BaseModel
     */
    public function setKey($key = ''){}

    /**
     * 获取实际表名,用于被关联表有多个分表的情况
     * @param $key_id
     * @return string
     * Author: fudaoji<fdj@kuryun.cn>
     */
    public function getRealTableName($key_id){}
}

我们写普通模型类时,尽量继承这个Base.php。