> ## 在控制器中调用模型进行查询数据
### 1. 获取单条数据
**在模型内部,请不要使用$this->name的方式来获取数据,请使用$this->getAttr('name') 替代。**
```php
// 根据主键查询
$user = User::get(1);
echo $user->name;
// 根据数组条件查询
$user = User::get(['name' => 'thinkphp']);
// 使用闭包函数查询
$user = User::get(function($query){
$query->where('name', 'thinkphp');
});
// 实例化之后调用查询方法
$user = new User();
$user->where('name', 'thinkphp')
->find();
```
### 2. 获取多条数据
```php
// 根据主键获取(可以传入字符串或数组)
$list = User::all('1,2,3');
$list = User::all([1,2,3]);
foreach($list as $key=>$user){
echo $user->name;
}
// 使用数组条件查询
$list = User::all(['status'=>1]);
// 使用闭包查询
$list = User::all(function($query){
$query->where('status', 1)->limit(3)->order('id', 'asc');
});
foreach($list as $key=>$user){
echo $user->name;
}
// 实例化对象之后调用查询方法
$user = new User();
$user->where('name', 'thinkphp')
->limit(10)
->order('id', 'desc')
->select();
```
### 3. 获取单个字段值或者单个列的值
```php
// 获取单个值
User::where('id',10)->value('score');
// 获取某个列的所有值
User::where('status',1)->column('name');
// 以id为索引
(适合构造key=>value组合)
User::where('status',1)->column('name','id');
User::where('status',1)->column('id,name'); // 同tp3的getField
```
### 4. 动态查询(即根据某个字段值进行快捷查询)
```
// 根据name字段查询用户
$user = User::getByName('thinkphp');
// 根据email字段查询用户
$user = User::getByEmail('thinkphp@qq.com');
```
### 5.通过Query类进行查询(即链式操作)
```
User::where('id','>',10)->select();
User::where('name','thinkphp')->find();
```
### 6. 批量查询(针对大数据量)
```
User::chunk(100,function($users){
foreach($users as $user){
// 处理user模型对象
}
});
```
### 7. 对查询进行缓存
```
// get和all的第三个参数表示开启查询缓存
$user = User::get(1,'',true);
$list = User::all('1,2,3','',true);
```
### 8. 主库读取(采用分布式数据库时,如果刚插入数据立刻查询是查不到的,因为从库还没有更新数据,这时候应该从主库进行获取)
```
// 第一种方案:
$user = new User;
$user->name = 'thinkphp';
$user->email = 'thinkphp@qq.com';
$user->save();
// 从主库读取数据
$user->master()->get($user->id);
// 第二种方案:
// 5.0.19+之后可以在数据库配置文件进行定义
// 主库写入后从主从库读取
'read_master' => true
// 第三种方案:
$user = new User;
$user->name = 'thinkphp';
$user->email = 'thinkphp@qq.com';
$user->readMaster()->save();
// 后续该模型的操作从主库读取数据
// 后续所有模型的查询都从主库读取数据
$user = new User;
$user->name = 'thinkphp';
$user->email = 'thinkphp@qq.com';
$user->readMaster(true)->save();
```
- 运行环境需求
- tp5目录结构
- 命令行生成代码
- 路由
- 请求
- 获取请求信息
- 超全局变量获取
- 更改请求变量的值
- 判断是否为某种请求类型
- 伪装表单请求类型
- HTTP头部信息
- 伪静态
- 向请求对象中注入自定义的属性和方法
- 简单的传参可以使用参数绑定
- 依赖注入(将对象注入方法作为参数)
- 将请求的数据进行缓存
- 控制器
- 一个控制器代码示例
- 空控制器
- 资源控制器
- 模型
- 一个模型代码示例
- 模型的四种调用方法
- 控制器中调用模型添加数据
- 控制器中调用模型更新数据
- 控制器中调用模型删除数据
- 控制器中调用模型查询数据
- 模型中使用聚合函数
- 获取器
- 修改器
- 自动写入时间戳
- 只读字段
- 软删除
- 自动类型转换
- 数据自动完成
- 查询范围
- 数组方式访问和转换为数组
- json序列化
- 模型的事件
- 关联模型
- 一对一关联
- 一对多关联
- 远程一对多(跨表关联)
- 多对多关联
- 多态关联
- 关联预载入N+1次查询变2次
- 延迟预载入
- 关联统计
- 视图与模板
- 模板引擎配置
- 分配数据到模板
- 输出替换
- 模板中输出变量
- 模板中输出系统变量(配置常量超全局)
- 模板中输出请求信息
- 模板中使用php函数
- 输出到模板中的变量指定默认值
- 模板中进行运算
- 原样输出代码不解析
- 模版中注释
- 模板布局与继承
- 文件包含
- 内置标签
- 循环输出标签
- 比较标签
- 条件判断标签
- 引入资源文件(js-css)
- 使用原生php
- 在模板中定义变量和常量
- 助手函数
- 常用功能
- 表单验证
- 验证器的定义
- 自定义验证规则
- 速查表
- 系统默认根命名空间
- 系统路径常量
- 请求变量
- URL请求和信息方法