ThinkPHP 5 模型使用历程 - 单一职责

模型是用来和数据库打交道的,基本只负责增删改查,所以相关业务逻辑,扩展出了logic

数据处理

这部分方法全是静态调用,依赖模型,但不依赖模型数据
LTErpCustomerWallet::create(1);

abstract class LTBase
{
    /**
     * @return string
     * @deprecated
     */
    public static function getModelClass(): string
    {
        $class = str_replace('logic\\table\\L', 'model\\table\\M', static::class);
        if (!class_exists($class)) {
            LTLogExceptionLogic::create(new ELogicTable('模型类不存在:' . $class));
            return 'etop\model\table\MTBase';
        }
        return $class;
    }
    /**
     * 通过ID快速获取模型对象
     *
     * @param int $id
     * @deprecated
     * @return MTBase
     */
    public static function selectInfoById(int $id = 0)
    {
        $class = static::getModelClass();
        /** @var MTBase $class */
        return $class::findOrEmpty($id);
    }
}

/**
 * Class LTErpCustomerWallet
 * @method MTErpCustomerWallet selectInfoById(int $id) static
 */
class LTErpCustomerWallet extends LTBase
{
    public static function create(int $id){
        $info = new MTErpCustomerWallet();
        $info->id = $id;
        $info->save();
    }
}

对象处理

这部分是针对某个模型对象,做数据处理
new LMSuperAdmin($this->admin)->getMenuList();

/**
 * 通过模型实例化的逻辑层
 * Class LTBase
 */
abstract class LMBase
{
    /**
     * 错误码
     * @var string
     */
    protected $errorCode = 0;
    /**
     * 错误信息
     * @var string
     */
    protected $errorMessage = '';
    /**
     * 状态
     * @var string
     */
    protected $status = '';
    /**
     * 模型对象
     * @var MTBase
     */
    protected $model;

    /**
     * Base constructor.
     *
     * @param MTBase $model
     *
     * @throws ELogicModel
     */
    public function __construct(MTBase $model = null)
    {
        if ($model) {
            $this->model = $model;
        } else {
            $class = static::MODEL_CLASS ?: str_replace('logic\\model\\LM', 'model\\table\\MT', static::class);
            if (class_exists($class)) {
                $this->model = new $class();
            } else {
                throw new ELogicModel('模型类不存在:' . $class);
            }
        }
    }

    /**
     * 获取模型
     * @return MTBase
     */
    public function getModel()
    {
        return $this->model;
    }

    /**
     * 设置模型
     *
     * @param MTBase $model
     *
     * @return LMBase
     */
    public function setModel(MTBase $model)
    {
        $this->model = $model;
        return $this;
    }

    /**
     * 获取错误码
     * @return string
     */
    public function getErrorCode()
    {
        return $this->errorCode;
    }

    /**
     * 获取错误信息
     * @return string
     */
    public function getErrorMessage()
    {
        return $this->errorMessage;
    }

    /**
     * 获取错误提示信息
     * @return string
     */
    public function getErrorInfo()
    {
        return $this->errorCode . '-' . $this->errorMessage;
    }
}
/**
 * Class LMSuperAdmin
 *
 * @method MTSuperAdmin getModel()
 */
class LMSuperAdmin extends LMBase
{
    /**
     * @var MTSuperAdmin
     */
    protected $model;

    /**
     * 获取用户拥有的菜单列表
     * @return array
     * @throws ELogicTable
     */
    public function getMenuList(){
        if($this->model->super_role_id === 0){
            $menu_ids = '-1';
        }else{
            $menu_ids = $this->model->super_role->menu_ids;
        }
        $list = LTSuperMenu::getMenuList($menu_ids);
        return $list;
    }
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
秦晓武
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!