模型的调用方式

在模型外部中调用模型有两种方式。示例如下:

//声明一个GoodsModel
<?php

namespace web\Model;

use Cml\Model;

class GoodsModel extends Model
{
    protected $table = 'goods';

    /**
     * 取出status=1分类=$cid的数据
     *
     * @param int $cid 分类id
     *
     * @return array
     */
    public function test($cid)
    {
        return $this->where('status', 1)->getByColumn($cid, 'cid');
    }
}

在逻辑层中调用方式如下:

默认下面已经在文件头声明了 use web\Model\GoodsModel;

//方式一:
$goodsModel = new GoodsModel();
$goodsModel->test();//调用上面声明的test方法
$goodsModel->db()->xxx();//框架提供的数据库相关操作参考[api手册](http://api.cmlphp.com/Cml/Db/Base.html)
$goodsModel->xxx(); //当GoodsModel中不存在xxx方法时会去执行$goodsModel->db()->xxx();
//即我们可以直接使用
$goodsModel->table($goodsModel->getTableName())->where('status', 1)->select();
替代
$goodsModel->db()->table($goodsModel->getTableName())->where('status', 1)->select();

还可以这么用:
$goodsModel->where('status', 1)->getByColumn($cid, 'cid');
//上面那句中getByColumn是快捷方法。相当于:
$goodsModel->db()->table($goodsModel->getTableName())->where('status', 1)->where('cid', $cid)->getOne();
//即调用model中不存在的方法自动去调用$goodsModel->db()->xxx时返回的依然是model的实例而非db()的实例。
//通过这个方式我们可以将db()中的方法和model中的快捷方法混用.

上例中 getByColumn这样的快捷方法是为了简化一些我们日常开发中常用的操作在Model中进行封装的一些方法参考快捷方法

//方式二:
GoodsModel::getInstance()->test();//用户自定义的方法
GoodsModel::getInstance()->db()->xxx();  //框架提供的数据库相关操作参考[api手册](http://api.cmlphp.com/Cml/Db/Base.html)
GoodsModel::getInstance()->xxx();//当GoodsModel中不存在xxx方法时会去执行GoodsModel::getInstance()->db()->xxx();
//即我们可以直接使用
GoodsModel::getInstance()->table($goodsModel->getTableName())->where('status', 1)->select();
替代
GoodsModel::getInstance()->db()->table($goodsModel->getTableName())->where('status', 1)->select();
还可以这么用:
GoodsModel::getInstance()->where('status', 1)->getByColumn($cid, 'cid');
//即调用model中不存在的方法自动去调用GoodsModel::getInstance()->db()->xxx时返回的依然是model的实例而非db()的实例。
//通过这个方式我们可以将db()中的方法和model中的快捷方法混用

上例中 getByColumn这样的快捷方法是为了简化一些我们日常开发中常用的操作在Model中进行封装的一些方法参考快捷方法

//v2.7.8以上支持Model直接以静态方式调用db中的方法
GoodsModel::test();
GoodsModel::xxx();//当GoodsModel中不存在xxx方法时会去执行\web\Model\GoodsModel::getInstance()->db()->xxx()
//即我们可以这么使用
GoodsModel::where('status', 1)->get('goods-cid-1');
//也可以将db()中的方法和model中的快捷方法混用
GoodsModel::where('status', 1)->getByColumn($cid, 'cid');
自动注入表名,表前缀

在以上的操作中我们都要手动执行$this->db('xxx')->table('xxx', 'xxx_'); 如果在一个model里有多个方法,那么每一个我方法们都要执行一次$this->db()->table()。 为了简化这个操作。可以直接使用快捷方法或者使用$this->mapDbAndTable()$goodsModel->mapDbAndTable()就相当于$goodsModel->db()->table($goodsModel->getTableName())

results matching ""

    No results matching ""