123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- <?php
- namespace app\common\model;
- use think\Model;
- use think\Request;
- use think\Session;
- /**
- * 模型基类
- * Class BaseModel
- * @package app\common\model
- */
- class BaseModel extends Model
- {
- public static $wxapp_id;
- public static $base_url;
- protected $alias = '';
- /**
- * 模型基类初始化
- */
- public static function init()
- {
- parent::init();
- // 获取当前域名
- self::$base_url = base_url();
- // 后期静态绑定wxapp_id
- self::bindWxappId();
- }
- /**
- * 获取当前调用的模块名称
- * 例如:admin, api, store, task
- * @return string|bool
- */
- protected static function getCalledModule()
- {
- if (preg_match('/app\\\(\w+)/', get_called_class(), $class)) {
- return $class[1];
- }
- return false;
- }
- /**
- * 后期静态绑定类名称
- * 用于定义全局查询范围的wxapp_id条件
- * 子类调用方式:
- * 非静态方法: self::$wxapp_id
- * 静态方法中: $self = new static(); $self::$wxapp_id
- */
- private static function bindWxappId()
- {
- if ($module = self::getCalledModule()) {
- $callfunc = 'set' . ucfirst($module) . 'WxappId';
- method_exists(new self, $callfunc) && self::$callfunc();
- }
- }
- /**
- * 设置wxapp_id (store模块)
- */
- protected static function setStoreWxappId()
- {
- $session = Session::get('yoshop_store');
- !empty($session) && self::$wxapp_id = $session['wxapp']['wxapp_id'];
- }
- /**
- * 设置wxapp_id (api模块)
- */
- protected static function setApiWxappId()
- {
- $request = Request::instance();
- self::$wxapp_id = $request->param('wxapp_id');
- }
- /**
- * 定义全局的查询范围
- * @param \think\db\Query $query
- */
- protected function base($query)
- {
- if (self::$wxapp_id > 0) {
- $query->where($query->getTable() . '.wxapp_id', self::$wxapp_id);
- }
- }
- /**
- * 设置默认的检索数据
- * @param $query
- * @param array $default
- * @return array
- */
- protected function setQueryDefaultValue(&$query, $default = [])
- {
- $data = array_merge($default, $query);
- foreach ($query as $key => $val) {
- if (empty($val) && isset($default[$key])) {
- $data[$key] = $default[$key];
- }
- }
- return $data;
- }
- /**
- * 设置基础查询条件(用于简化基础alias和field)
- * @test 2019-4-25
- * @param string $alias
- * @param array $join
- * @return BaseModel
- */
- public function setBaseQuery($alias = '', $join = [])
- {
- // 设置别名
- $aliasValue = $alias ?: $this->alias;
- $model = $this->alias($aliasValue)->field("{$aliasValue}.*");
- // join条件
- if (!empty($join)) : foreach ($join as $item):
- $model->join($item[0], "{$item[0]}.{$item[1]}={$aliasValue}."
- . (isset($item[2]) ? $item[2] : $item[1]));
- endforeach; endif;
- return $model;
- }
- /**
- * 批量更新数据(支持带where条件)
- * @param array $data [0 => ['data'=>[], 'where'=>[]]]
- * @return \think\Collection
- */
- public function updateAll($data)
- {
- return $this->transaction(function () use ($data) {
- $result = [];
- foreach ($data as $key => $item) {
- $result[$key] = self::update($item['data'], $item['where']);
- }
- return $this->toCollection($result);
- });
- }
- }
|