企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
#### 获取数据对象原始数据:getData() 所谓数据对象原始数据:其实就是对象的$data=[ ]数组的值 ~~~ /** * 获取对象原始数据 如果不存在指定字段返回false * @access public * @param string $name 字段名 留空获取全部 * @return mixed * @throws InvalidArgumentException */ public function getData($name = null) { if (is_null($name)) { //如何不传参数 return $this->data; //返回整个数组(模型对象中与记录对应的字段集) } elseif (array_key_exists($name, $this->data)) { //参数键名是否$data中存在 return $this->data[$name]; //返回当前数组元素,如:$data['name'],name为字段名 } else { //如果传入的键名在表中无对应字段对应,则返回错误信息 throw new InvalidArgumentException('property not exists:' . $this->class . '->' . $name); } } ~~~ 实例 ~~~ <?php namespace app\index\controller; //导入模型类 use app\index\model\Staff; class Index { public function index(){ //1.创建模型对象$model //此时的模型对象仅仅完成了与特定数据表的绑定 //理论上讲,仍是一个没有任何数据的空模型 $model = new Staff(); //2.创建数据源,供创建数据对象使用 $data = []; $data['id'] = 1001; $data['name'] = 'Peter'; $data['age'] = 26; //3.data()方法完成前面模型对象的$data属性赋值 //使模型对象转换成数据对象,现在$model 已经是数据对象啦 $model -> data($data); //4.getData()方法获取数据对象原始数据$data $result = $model -> getData(); //5.查看数据对象原始数据:$data属性(数组类型) dump($result); } } ~~~ 查看数据对象原始数据:$data属性 ~~~ array(3) { ["id"] => int(1001) ["name"] => string(6) "Peter" ["age"] => int(26) } string(6) "Jackee" ~~~ getAttr()方法获取数据对象原始数据 ~~~ //getAttr()方法获取数据对象原始数据$data['name']的值 $result = $model -> getAttr('name'); // "Jackee" ~~~ * * * * * #### 多条数据查询all() 控制器方法 ~~~ <?php namespace app\index\controller; use app\index\model\Staff; class Index { public function index(){ //1.执行查询,返回数据对象数组 $result = Staff::all('1009,1010'); //2.遍历该数据对象数组:$result //$data既是循环变量,也是其中一个数据对象 foreach ($result as $data){ //getData()可以获取数据对象原始数据:$data属性值 dump($data -> getData()); } } } ~~~ 输出 ~~~ array(6) { ["id"] => int(1009) ["name"] => string(6) "王五" ["sex"] => int(1) ["salary"] => float(8100) ["dept"] => string(9) "开发部" ["hiredate"] => string(10) "2017-01-01" } array(6) { ["id"] => int(1010) ["name"] => string(6) "王六" ["sex"] => int(1) ["salary"] => float(2000) ["dept"] => string(9) "开发部" ["hiredate"] => string(10) "2017-02-01" } ~~~ 任务2:查询表中年龄age大于30,并且工资salary大于800的员工信息 ~~~ <?php namespace app\index\controller; //导入模型类 use app\index\model\Staff; class Index { public function index(){ //1.构造查询表达式 $map['age'] = ['>',30]; $map['salary'] = ['>',8000]; //2.执行查询,返回数据对象数组 $result = Staff::all($map); //3.遍历该数据对象数组:$result //$data既是循环变量,也是其中一个数据对象 foreach ($result as $data){ //getData()可以获取数据对象原始数据:$data属性值 dump($data -> getData()); } } } ~~~ 任务3:在任务2的基础上(age>30 AND salary>8000),我们又提出了三个需求:按工资排序,只输出工资最高的3个人的编号,姓名,年龄,工资信息。 ~~~ <?php namespace app\index\controller; //导入模型类 use app\index\model\Staff; class Index { public function index(){ //1.构造闭包函数 $closure = function ($query){ //1.设置字段别名 $field['id'] = '编号'; $field['name'] = '姓名'; $field['age'] = '年龄'; $field['salary'] = '工资'; //2.设置查询表达式 $map['age'] = ['>',30]; $map['salary'] = ['>',8000]; //3.执行查询 $query -> field($field) //限制显示字段 -> where($map) //过滤查询结果 -> order('salary desc') //按salary字段降序输出 -> limit(3); //限制输出数量 }; //2.执行闭包查询,返回数据对象数组 $result = Staff::all($closure); //3.遍历该数据对象数组:$result //$data既是循环变量,也是其中一个数据对象 foreach ($result as $data){ //getData()可以获取数据对象原始数据:$data属性值 dump($data -> getData()); } } } ~~~ 5. 总结: all( )方法与查询类的select方法的功能是一样的,你完成可以认为这是省去了选择数据表的select操作。其实将闭包查询中的all( ),换成:select( )方法,查询结果是一样的 ~~~ $result = Staff::select($closure); ~~~ 与 ~~~ $result = Staff::all($closure); ~~~ 完全是等价的!