## 助手函数:model( ) >[info] 与数据库查询一样,模型也提供了助手函数:model( )来方便开发者。 *** #### 1. 功能:简化模型实例化工作。 >[warning] model函数类似于ThinkPHP3.2.3版中大写字母方法M( )和D( )。 *** #### 2. 源码:/thinkphp/Helper.php (助手函数类) >[info] 助手函数类随框架自动加载,不需要手工导入 * model( )函数源码: ~~~ /** * 实例化Model * @param string $name Model名称 * @param string $layer 业务层名称 * @param bool $appendSuffix 是否添加类名后缀 * @return \think\Model */ function model($name = '', $layer = 'model', $appendSuffix = false) { return Loader::model($name, $layer, $appendSuffix); } ~~~ >[info] 源码很简单,就是调用加载器静态调用了model方法来完成快速实例化操作。 *** #### 3. 实例演示: * 创建模型类:/application/index/mode/Staff.php ~~~ <?php namespace app\index\model; //导入模型类 use think\model; class Staff extends model { //自定义模型类代码 } ~~~ **任务** :查询编号id=1009的员工信息(id编号,姓名name,工资salary) * 控制器:/application/index/controller/Index.php ~~~ <?php namespace app\index\controller; class Index { public function index(){ //获取满足条件的单个记录:返回一个数据对象 $data = model('Staff')->field('id,name,salary')->where('id = 1009')->find(); //解析数据对象中的原始数据:$data属性 $result = $data -> getData(); //输出结果:二维数组 dump($result); } } ~~~ **代码分析:** >[info] 1. 无须引入自定义模型类:use app\index\model\Staff; > 2. model函数返回的是模型对象,可以直接调用数据库方法完成查询操作; > 3. 本例中,model函数返回的是对象,不是类,不能静态调用get方法完成操作; > 4. 尽管调用的是数据库查询方法find( )完成,但返回的仍是模型对象,不是二维数组; > 5. 所以要得到原始数据,必须对数据对象$data添加getData操作来获取原始数据; * 返回结果: ~~~ array(3) { ["id"] => int(1009) ["name"] => string(9) "老顽童" ["salary"] => float(5000) } ~~~ * 对应的SQL语句: ~~~ SELECT `id`,`name`,`salary` FROM `tp5_staff` WHERE ( id = 1009 ) LIMIT 1 ~~~ * 用SQLPRO for MySQL查看: ![](https://box.kancloud.cn/87cabf39346059ddeb5cd60e1fe1a5b1_663x268.png) * * * * * #### 4. 总结: >[warning] 助手函数model语法简单,代码清晰,但执行效率远低于模型静态方法查询!静态方法语法较复杂,代码量大,但执行效率高,适合装逼。究竟用哪个,读者自己决定吧!总之,我是一直坚持用静态方法查询。