### [](https://octobercms.com/docs/database/relations#querying-relations)查询关系
由于可以通过函数调用所有类型的Model关系,因此您可以调用这些函数来获取关系的实例,而无需实际执行关系查询。此外,所有类型的关系还可以用作[查询构建器](https://octobercms.com/docs/database/query),使您可以继续将约束链链接到关系查询上,最后对数据库执行SQL。
例如,想象一个博客系统,其中一个`User`模型具有许多关联的`Post`模型:
~~~
class User extends Model
{
public $hasMany = [
'posts' => ['Acme\Blog\Models\Post']
];
}
~~~
### [](https://octobercms.com/docs/database/relations#querying-method)通过关系方法访问
您可以使用方法查询**职位**关系,并向关系中添加其他约束`posts`。这使您能够在关系上链接任何[查询构建器](https://octobercms.com/docs/database/query)方法。
~~~
$user = User::find(1);
$posts = $user->posts()->where('is_active', 1)->get();
$post = $user->posts()->first();
~~~
### [](https://octobercms.com/docs/database/relations#querying-dynamic-property)通过动态属性访问
如果不需要向关系查询添加其他约束,则可以简单地访问该关系,就好像它是一个属性一样。例如,继续使用我们的`User`和`Post`示例模型,我们可以`$user->posts`改为使用属性访问用户的所有帖子。
~~~
$user = User::find(1);
foreach ($user->posts as $post) {
// ...
}
~~~
动态属性是“延迟加载”,这意味着它们仅在您实际访问它们时才加载其关系数据。因此,开发人员经常使用[急切的加载](https://octobercms.com/docs/database/relations#eager-loading)来预加载他们知道在加载模型后将对其进行访问的关系。预先加载大大减少了必须执行的SQL查询才能加载模型的关系。
### [](https://octobercms.com/docs/database/relations#querying-existence)查询关系存在
访问模型的记录时,您可能希望根据关系的存在来限制结果。例如,假设您要检索所有具有至少一条评论的博客文章。为此,您可以将关系的名称传递给`has`方法:
~~~
// Retrieve all posts that have at least one comment...
$posts = Post::has('comments')->get();
~~~
您还可以指定一个运算符并计数以进一步自定义查询:
~~~
// Retrieve all posts that have three or more comments...
$posts = Post::has('comments', '>=', 3)->get();
~~~
嵌套`has`语句也可以使用“点”符号构造。例如,您可以检索所有具有至少一项评论和投票的帖子:
~~~
// Retrieve all posts that have at least one comment with votes...
$posts = Post::has('comments.votes')->get();
~~~
如果您需要更大的功能,可以使用`whereHas`和`orWhereHas`方法在`has`查询中放置“ where”条件。这些方法使您可以向关系约束中添加自定义约束,例如检查注释的内容:
~~~
// Retrieve all posts with at least one comment containing words like foo%
$posts = Post::whereHas('comments', function ($query) {
$query->where('content', 'like', 'foo%');
})->get();
~~~
- 基本说明
- 基本操作
- 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 安装
- 伪静态配置
- 依赖注入 & 控制器
- 中间件
- 路由文件
- 视图