模型的说明、创建、获取

 


 

模型说明

我们希望所有对数据库的操作都放在模型、业务逻辑等里面,而不是直接在Controller里面操作数据库,模型封装业务逻辑并对数据库做相应操作,对外提供封装好的方法,供其它类使用,当然,比较复杂的业务逻辑,我们会放到business里面来处理

 

模型存放位置

存放位置是随意的,下面只是推荐做法

 

1、应用的model文件夹里面

 

/app/
  |--web
  |   |--business
  |   |--model
  |   |--service

 

2、公共模型/model

 

/app
  |--web
  |   |--business
  |   |--model
  |   |--service
/business
/model

 

建立一个model

模型可以不继承Timo\Core\Model,如果需要访问数据库,那么就要继承Timo\Core\Model类了

 

文档Model

 

<?php
namespace app\web\model;

class DocumentModel
{
    /**
     * 返回文档列表
     *
     * @return array
     */
    public function getDocumentList()
    {
        $data = array();
        foreach ($this->docCategory as $key => $category)
        {
            $data[$key] = $category;
            $data[$key]['document_list'] = array();
            foreach ($this->documentList as $doc) {
                if ($doc['cid'] == $category['cid']) {
                    $data[$key]['document_list'][] = $doc;
                }
            }
        }
        return $data;
    }
}

 

用户Model

 

<?php
namespace model\user;

use model\BaseModel;

class UserModel extends BaseModel
{
    /**
     * @var string 用户扩展表
     */
    protected $t_ue = 'sns_user_extends';

    /**
     * 获取用户基础数据
     *
     * @param $where
     * @param string $fields
     * @return array|bool
     */
    public function getUserBaseInfo($where, $fields = '*')
    {
        if (is_numeric($where)) {
            return $this->get($where, $fields);
        }
        return $this->fields($fields)->where($where)->row();
    }

    /**
     * 获取用户扩展数据
     *
     * @param $where
     * @param string $fields
     * @return array|bool
     */
    public function getUserExtendsInfo($where, $fields = '*')
    {
        return $this->getRow($where, $fields, $this->t_ue);
    }
}

 

模型的实例化

方式一,直接new

 

$userModel = new UserModel();
$userModel->getUserBaseInfo(100);

 

方式二,使用Loader::model()

 

用Loader::model的好处是,这样加载模型是单例模式加载的

 

1、当前应用的model层下面的模型

 

/**
 * @var $userModel UserModel
 */
$userModel = Loader::model('app\web\model\UserModel'); //对应app\web\model\UserModel

 

2、公共模型

 

/**
 * @var $userModel UserModel
 */
Loader::model('model\user\UserModel');

如果PHP版本大于等于6.5还可以这样写

Loader::model(UserModel::class);

 

Loader::model怎样给类构造函数传参

传一个参数

 

$userModel = Loader::model('app\web\model\UserModel', 1008);

 

传多个参数

 

想传多少个就传多少个

 

$userModel = Loader::model('app\web\model\UserModel', 1009, 'timophp', true);

 

翻译成原始的:

 

$userModel = new UserModel(1009, 'timophp', true);