#### 获取数据对象原始数据: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);
~~~
完全是等价的!
- 目录
- 5.0.10环境配置
- 5.0.10控制器模型对象
- 5.0.10模型初始化
- 5.0.10定义数据对象
- 5.0.10创建数据对象data()方法
- 5.0.10创建数据对象-setAttr方法
- 5.0.10创建数据对象__set()方法
- 5.0.10查询数据对象getData()
- 实例
- 5.0.10保存数据save()方法
- 5.0.10保存数据saveAll()
- 5.0.10更新数据save()
- 5.0.10批量更新数据saveAll()
- 5.0.10删除数据delete()
- 5.0.10删除数据destroy()
- 5.0.10traits详解
- ThinkPHP 5.0 速查表
- 注释
- 环境变量配置
- Model分层
- MVC 逻辑服务数据
- Model分层及多对多关联的建立
- 控制器调用逻辑层
- Session
- 子域名session共享
- 系统错误
- 版本错误
- 返回错误
- Token令牌及身份识别
- 关联查询
- 安装
- Git安装
- Composer
- 扩展
- Composer类
- 非Composer类
- 引用第三方库
- 自定义命令行
- 计划任务
- 调试
- 调试模式
- 监听SQL
- 数据库调试
- 单元测试
- 初始化
- 控制器初始化
- 模型初始化
- 数据缓存
- 实战
- 版本升级
- 从V5.0.17升级到V5.0.18