This repository has been archived on 2024-07-11. You can view files and clone it, but cannot push or open issues or pull requests.
yoshop/source/application/common/model/BaseModel.php
2020-04-25 22:20:29 +08:00

144 lines
3.5 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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');
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);
});
}
}