模型的调用方式
在模型外部中调用模型有两种方式。示例如下:
//声明一个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())
原文: http://doc.cmlphp.com/devintro/model/mysql/getmodeltype.html