THINKPHP5 模型使用歷程(五)

秦曉武發表於2020-12-04

單一職責

模型是用來和資料庫打交道的,基本只負責增刪改查,所以相關業務邏輯,擴充套件出了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 協議》,轉載必須註明作者和本文連結

相關文章