# 关系行为
## 关系行为
### [](https://octobercms.com/docs/backend/relations#introduction)介绍
**关系行为**是控制器修改器,用于轻松管理页面上的复杂[模型](https://octobercms.com/docs/database/model)关系。不要与仅提供简单管理的[列表关系列](https://octobercms.com/docs/backend/lists#column-types)或[表单关系字段](https://octobercms.com/docs/backend/forms#widget-relation)混淆。
关系行为取决于[关系定义](https://octobercms.com/docs/backend/relations#relation-definitions)。为了使用关系行为,您应该将`Backend.Behaviors.RelationController`定义添加到`$implement`控制器类的字段中。另外,`$relationConfig`应该定义class属性,并且其值应引用用于[配置行为选项](https://octobercms.com/docs/backend/relations#configuring-relation)的YAML文件。
~~~
namespace Acme\Projects\Controllers;
class Projects extends Controller
{
public $implement = [
'Backend.Behaviors.FormController',
'Backend.Behaviors.RelationController',
];
public $formConfig = 'config_form.yaml';
public $relationConfig = 'config_relation.yaml';
}
~~~
> **注意:**关系行为经常与[表单行为](https://octobercms.com/docs/backend/form)一起使用。
### [](https://octobercms.com/docs/backend/relations#configuring-relation)配置关系行为
`$relationConfig`属性中引用的配置文件以YAML格式定义。该文件应放置在控制器的[views目录中](https://octobercms.com/docs/backend/controllers-ajax/#introduction)。所需的配置取决于目标模型和相关模型之间的[关系类型](https://octobercms.com/docs/backend/relations#relationship-types)。
关系配置文件中的第一级字段定义目标模型中的关系名称。例如:
~~~
class Invoice {
public $hasMany = [
'items' => ['Acme\Pay\Models\InvoiceItem'],
];
}
~~~
具有关联关系的*Invoice*模型`items`应使用相同的关联名称定义第一级字段:
~~~
# ===================================
# Relation Behavior Config
# ===================================
items:
label: Invoice Line Item
view:
list: $/acme/pay/models/invoiceitem/columns.yaml
toolbarButtons: create|delete
manage:
form: $/acme/pay/models/invoiceitem/fields.yaml
recordsPerPage: 10
~~~
然后,以下选项用于每个关系名称定义:
| 选项 | 描述 |
| --- | --- |
| **label** | 该关系的标签,以单数形式表示。 |
| **view** | 特定于视图容器的配置,请参见下文。 |
| **manage** | 特定于管理弹出窗口的配置,请参见下文。 |
| **pivot** | 表单字段定义文件的引用,用于[与数据透视表数据建立关系](https://octobercms.com/docs/backend/relations#belongs-to-many-pivot)。 |
| **emptyMessage** | 关系为空时显示的消息,可选。 |
| **readOnly** | 禁用添加,更新,删除或创建关系的功能。默认值:false |
| **deferredBinding** | [](https://octobercms.com/docs/database/model#deferred-binding)可用[会话密钥延迟所有绑定操作](https://octobercms.com/docs/database/model#deferred-binding)。默认值:false |
可以为**view**或**manage**选项指定这些配置值,适用于列表,表单或两者的呈现类型。
| 选项 | 类型 | 描述 |
| --- | --- | --- |
| **form** | Form | 表单域定义文件的参考,请参阅[后端表单域](https://octobercms.com/docs/backend/forms#form-fields)。 |
| **list** | List | 对列表列定义文件的引用,请参阅[后端列表列](https://octobercms.com/docs/backend/lists#list-columns)。 |
| **showSearch** | List | 显示用于搜索记录的输入。默认值:false |
| **showSorting** | List | 在每一列上显示排序链接。默认值:true |
| **defaultSort** | List | 未定义用户首选项时,设置默认的排序列和方向。支持带键`column`和的字符串或数组`direction`。 |
| **recordsPerPage** | List | 每页显示的最大行数。 |
| **noRecordsMessage** | List | 找不到记录时显示的消息,可以引用[本地化字符串](https://octobercms.com/docs/plugin/localization)。 |
| **conditions** | List | 指定要应用于列表模型查询的原始where查询语句。 |
| **scope** | List | 指定在**相关表单模型中**定义的[查询范围方法](https://octobercms.com/docs/database/model#query-scopes),以始终应用于列表查询。该关系将附加到的**模型**(即**父模型**)作为第二个参数(是第一个)传递给此范围方法。`$query` |
| **filter** | List | 对过滤器作用域定义文件的引用,请参阅[后端列表过滤器](https://octobercms.com/docs/backend/lists#list-filters)。 |
只能为**视图**选项指定这些配置值。
| 选项 | 类型 | 描述 |
| --- | --- | --- |
| **showCheckboxes** | 清单 | 在每个记录旁边显示复选框。 |
| **recordUrl** | 清单 | 将每个列表记录链接到另一个页面。例如:**users / update /:id**。该`:id`部分将替换为记录标识符。 |
| **customViewPath** | 清单 | 指定一个自定义视图路径以覆盖列表使用的部分。 |
| **recordOnClick** | 清单 | 单击记录时执行的自定义JavaScript代码。 |
| **toolbarPartial** | 都 | 使用工具栏按钮对控制器部分文件的引用。例如:**\_relation\_toolbar.htm**。此选项将覆盖工具*栏按钮*选项。 |
| **toolbarButtons** | 都 | 要显示的按钮集。可以将其格式化为数组或管道分隔的字符串,或设置为`false`不显示任何按钮。可用的选项有:`create`,`update`,`delete`,`add`,`remove`,`link`,和`unlink`。范例:`add\|remove`。
另外,您可以通过将此属性设置为关联数组来自定义这些按钮内的文本,其中键为按钮类型,值为该按钮的文本。范例:`create: 'Assign User'`。该值还支持翻译。 |
只能为**manage**选项指定这些配置值。
| 选项 | 类型 | 描述 |
| --- | --- | --- |
| **title** | 都 | 弹出标题,可以引用[本地化字符串](https://octobercms.com/docs/plugin/localization)。
此外,可以通过将每个模式的标题设置为关联数组来分别自定义每种模式的标题,其中键为模式,值为显示该模式时使用的标题。例如:`form: acme.blog::lang.subcategory.FormTitle`。 |
| **context** | 形成 | 显示表单的上下文。可以是字符串或带有键的数组:创建,更新。 |
### [](https://octobercms.com/docs/backend/relations#relation-display)显示关系经理
在可以在任何页面上管理关系之前,必须首先通过调用`initRelation`方法在控制器中初始化目标模型。
~~~
$post = Post::where('id', 7)->first();
$this->initRelation($post);
~~~
> **注:**该[表单行为](https://octobercms.com/docs/backend/forms)在其创建,更新和预览操作将自动初始化模型。
然后可以通过调用该`relationRender`方法为指定的关系定义显示关系管理器。例如,如果要在“[预览”](https://octobercms.com/docs/backend/forms#form-preview-view)页面上显示关系管理器,**preview.htm**视图的内容可能如下所示:
~~~
<?= $this->formRenderPreview() ?>
<?= $this->relationRender('comments') ?>
~~~
您可以通过将选项作为第二个参数传递来指示关系管理器以只读模式呈现:
~~~
<?= $this->relationRender('comments', ['readOnly' => true]) ?>
~~~
- 基本说明
- 基本操作
- 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 安装
- 伪静态配置
- 依赖注入 & 控制器
- 中间件
- 路由文件
- 视图