# 检索模型
### [](https://octobercms.com/docs/database/model#retrieving-models)检索模型
从数据库请求数据时,模型将主要使用`get`或`first`方法检索值,具体取决于您是希望[检索多个模型](https://octobercms.com/docs/database/model#retrieving-multiple-models)还是[检索单个模型](https://octobercms.com/docs/database/model#retrieving-single-models)。从模型派生的查询返回[October \\ Rain \\ Database \\ Builder](https://octobercms.com/docs/api/october/rain/database/builder)的实例。
> **注意**:默认情况下,所有模型查询都[启用](https://octobercms.com/docs/database/query#in-memory-caching)了[内存中缓存](https://octobercms.com/docs/database/query#in-memory-caching)。尽管缓存在大多数情况下会自动使自身失效,但是`$model->reload()`对于更复杂的用例,有时您将需要使用该方法来刷新缓存。
### [](https://octobercms.com/docs/database/model#retrieving-multiple-models)检索多个模型
创建模型[及其关联的数据库表之后](https://octobercms.com/docs/database/structure#migration-structure),就可以开始从数据库中检索数据了。将每个模型视为强大的[查询生成器,](https://octobercms.com/docs/database/query)使您可以查询与该模型关联的数据库表。例如:
~~~
$flights = Flight::all();
~~~
#### [](https://octobercms.com/docs/database/model#accessing-column-values)访问列值
如果您有模型实例,则可以通过访问相应的属性来访问模型的列值。例如,让我们遍历`Flight`查询返回的每个实例,并回显该`name`列的值:
~~~
foreach ($flights as $flight) {
echo $flight->name;
}
~~~
#### [](https://octobercms.com/docs/database/model#adding-constraints)添加其他约束
该`all`方法将返回模型表中的所有结果。由于每个模型都充当[查询构建器](https://octobercms.com/docs/database/query),因此您还可以向查询添加约束,然后使用该`get`方法来检索结果:
~~~
$flights = Flight::where('active', 1)
->orderBy('name', 'desc')
->take(10)
->get();
~~~
> **注意:**由于模型是查询构建器,因此您应该熟悉[查询构建器](https://octobercms.com/docs/database/query)上可用的所有方法。您可以在模型查询中使用这些方法中的任何一种。
#### [](https://octobercms.com/docs/database/model#returning-collections)馆藏
对于`all`和`get`检索多个结果的方法,`Collection`将返回a的实例。此类提供[了各种有用的方法](https://octobercms.com/docs/database/collection)来处理结果。当然,您可以像数组一样简单地遍历此集合:
~~~
foreach ($flights as $flight) {
echo $flight->name;
}
~~~
#### [](https://octobercms.com/docs/database/model#chunking-results)分块结果
如果需要处理数千条记录,请使用`chunk`命令。该`chunk`方法将检索模型的“块”,将其馈给给定的模型`Closure`进行处理。使用`chunk`大型结果集时,使用该方法将节省内存:
~~~
Flight::chunk(200, function ($flights) {
foreach ($flights as $flight) {
//
}
});
~~~
传递给该方法的第一个参数是每个“块”希望接收的记录数。从数据库中检索到的每个块都将调用作为第二个参数传递的Closure。
### [](https://octobercms.com/docs/database/model#retrieving-single-models)检索单个模型
除了检索给定表的所有记录之外,您还可以使用`find`和检索单个记录`first`。这些方法返回一个模型实例,而不是返回模型集合:
~~~
// Retrieve a model by its primary key
$flight = Flight::find(1);
// Retrieve the first model matching the query constraints
$flight = Flight::where('active', 1)->first();
~~~
#### [](https://octobercms.com/docs/database/model#model-not-found-exception)找不到例外
有时,如果找不到模型,您可能希望抛出异常。这在路由或控制器中特别有用。该`findOrFail`和`firstOrFail`方法将检索查询的第一个结果。但是,如果未找到结果,`Illuminate\Database\Eloquent\ModelNotFoundException`将抛出:
~~~
$model = Flight::findOrFail(1);
$model = Flight::where('legs', '>', 100)->firstOrFail();
~~~
当[开发一个API](https://octobercms.com/docs/services/router),如果异常没有被捕获,一个`404`HTTP响应被自动发送回用户,所以没有必要写明确检查返回`404`使用这些方法时的反应:
~~~
Route::get('/api/flights/{id}', function ($id) {
return Flight::findOrFail($id);
});
~~~
### [](https://octobercms.com/docs/database/model#retrieving-aggregates)检索聚合
您也可以使用`count`,`sum`,`max`,和其他[聚合函数](https://octobercms.com/docs/database/query#aggregates)通过查询器提供。这些方法返回适当的标量值,而不是完整的模型实例:
~~~
$count = Flight::where('active', 1)->count();
$max = Flight::where('active', 1)->max('price');
~~~
- 基本说明
- 基本操作
- October cms 安装
- 后台控制器路径
- 图标
- 获取安装网上的插件/主题
- 插件构造器使用
- 定时任务
- October后台控制器
- vscode编辑器
- ajax操作
- 使用
- ajax更新组件
- ajax属性API
- JavaScript API
- ajax综合使用
- 主题
- 多语言主题
- 安装市场主题
- 主题程序处理
- 主题
- 页面
- 部件
- 布局
- 内容
- 组件
- 媒体
- 主题表单操作
- 表单使用
- 表单后端程序处理
- 插件
- 自定义插件
- 插件说明
- 插件导航条
- 插件数据库设置
- 插件的设置管理
- 插件的配置文件config
- 组件
- app服务
- app容器
- 扩展行为
- 缓存
- Collection类
- Lazy Collections
- Collection方法
- 助手函数
- 数组助手函数
- 路径助手函数
- 玄乐助手函数
- 其他助手函数
- 错误与记录
- 事件处理
- HTML页面
- 文件与目录操作
- 散列和加密
- 邮件
- 邮件内容
- 邮件发送
- 分页
- 模板解析器
- 动态解析器语法
- 队列消息
- 请求与输入
- 响应
- 视图
- 路由器
- 配置
- 验证操作
- 处理错误消息
- 错误消息与视图
- 可用的验证规则
- 有条件的验证规则
- 验证数组
- 错误消息
- 自定义验证规则
- 模型操作
- 定义模型与其属性
- 检索模型
- 插入与更新
- 删除模型
- 查询范围
- 事件操作
- 关联操作
- 定义关系
- 关系类型
- 多肽关系
- 关系查询
- 渴望加载
- 插入模型
- 数据库操作
- 基本用法
- 数据表结构
- 查询连贯操作
- 结果检索
- select子句
- 插入更新
- where子句
- 排序,分组,限制和偏移
- 文件附件
- Collection操作
- 属性操作
- 系列化json
- 数据库属性
- 数据库行为
- 控制器
- 后台控制器定义
- 后台页面
- 后台组件
- 后台表单
- 表单组件
- 表单视图
- 表单行为
- 后台列表
- 列表行为
- 列表过滤器
- 可用列类型
- 关系行为
- 关系行为类型
- 扩展关系行为
- 列表排序操作
- 导入导出操作
- 用于与权限
- corlate模板修改
- 修改顶部导航
- laravel问题
- 控制器不存在
- 控制器
- 路由组
- laravel笔记
- laravel 安装
- 伪静态配置
- 依赖注入 & 控制器
- 中间件
- 路由文件
- 视图