模型的调用方式

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

  1. //声明一个GoodsModel
  2. <?php
  3. namespace web\Model;
  4. use Cml\Model;
  5. class GoodsModel extends Model
  6. {
  7. protected $table = 'goods';
  8. /**
  9. * 取出status=1分类=$cid的数据
  10. *
  11. * @param int $cid 分类id
  12. *
  13. * @return array
  14. */
  15. public function test($cid)
  16. {
  17. return $this->where('status', 1)->getByColumn($cid, 'cid');
  18. }
  19. }

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

默认下面已经在文件头声明了 use web\Model\GoodsModel;
  1. //方式一:
  2. $goodsModel = new GoodsModel();
  3. $goodsModel->test();//调用上面声明的test方法
  4. $goodsModel->db()->xxx();//框架提供的数据库相关操作参考[api手册](http://api.cmlphp.com/Cml/Db/Base.html)
  5. $goodsModel->xxx(); //当GoodsModel中不存在xxx方法时会去执行$goodsModel->db()->xxx();
  6. //即我们可以直接使用
  7. $goodsModel->table($goodsModel->getTableName())->where('status', 1)->select();
  8. 替代
  9. $goodsModel->db()->table($goodsModel->getTableName())->where('status', 1)->select();
  10. 还可以这么用:
  11. $goodsModel->where('status', 1)->getByColumn($cid, 'cid');
  12. //上面那句中getByColumn是快捷方法。相当于:
  13. $goodsModel->db()->table($goodsModel->getTableName())->where('status', 1)->where('cid', $cid)->getOne();
  14. //即调用model中不存在的方法自动去调用$goodsModel->db()->xxx时返回的依然是model的实例而非db()的实例。
  15. //通过这个方式我们可以将db()中的方法和model中的快捷方法混用.
上例中 getByColumn这样的快捷方法是为了简化一些我们日常开发中常用的操作在Model中进行封装的一些方法参考快捷方法
  1. //方式二:
  2. GoodsModel::getInstance()->test();//用户自定义的方法
  3. GoodsModel::getInstance()->db()->xxx(); //框架提供的数据库相关操作参考[api手册](http://api.cmlphp.com/Cml/Db/Base.html)
  4. GoodsModel::getInstance()->xxx();//当GoodsModel中不存在xxx方法时会去执行GoodsModel::getInstance()->db()->xxx();
  5. //即我们可以直接使用
  6. GoodsModel::getInstance()->table($goodsModel->getTableName())->where('status', 1)->select();
  7. 替代
  8. GoodsModel::getInstance()->db()->table($goodsModel->getTableName())->where('status', 1)->select();
  9. 还可以这么用:
  10. GoodsModel::getInstance()->where('status', 1)->getByColumn($cid, 'cid');
  11. //即调用model中不存在的方法自动去调用GoodsModel::getInstance()->db()->xxx时返回的依然是model的实例而非db()的实例。
  12. //通过这个方式我们可以将db()中的方法和model中的快捷方法混用
上例中 getByColumn这样的快捷方法是为了简化一些我们日常开发中常用的操作在Model中进行封装的一些方法参考快捷方法
  1. //v2.7.8以上支持Model直接以静态方式调用db中的方法
  2. GoodsModel::test();
  3. GoodsModel::xxx();//当GoodsModel中不存在xxx方法时会去执行\web\Model\GoodsModel::getInstance()->db()->xxx()
  4. //即我们可以这么使用
  5. GoodsModel::where('status', 1)->get('goods-cid-1');
  6. //也可以将db()中的方法和model中的快捷方法混用
  7. 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