doc: 补充 Active Record 多种方式关联查询。

This commit is contained in:
Suomm 2023-07-31 16:15:11 +08:00
parent 11ee1ad94d
commit b34733cfda

View File

@ -137,30 +137,54 @@ Account.create()
.page(Page.of(1,10)); .page(Page.of(1,10));
``` ```
## 多表关联 ## 关联查询 <Badge type="tip" text="v1.5.5" />
`Model` 提供了 `joins``@Relation`种方式实现多表关联查询,例如:用户与角色的关系: `Model` 提供了种方式实现多表关联查询,例如:用户与角色的关系:
- 通过 [joins](./relations-query.md#方案-3-join-query) 联表方式查询数据: - (默认)通过 [Joins Query](./relations-query.md#方案-3-join-query) 联表方式查询数据:
```java ```java
User.create() User.create()
.select(USER.ALL_COLUMNS,ROLE.ALL_COLUMNS) .select(USER.ALL_COLUMNS,ROLE.ALL_COLUMNS)
.leftJoin(USER_ROLE).as("ur").on(USER_ROLE.USER_ID.eq(USER.USER_ID)) .leftJoin(USER_ROLE).as("ur").on(USER_ROLE.USER_ID.eq(USER.USER_ID))
.leftJoin(ROLE).as("r").on(USER_ROLE.ROLE_ID.eq(ROLE.ROLE_ID)) .leftJoin(ROLE).as("r").on(USER_ROLE.ROLE_ID.eq(ROLE.ROLE_ID))
.where(USER.USER_ID.eq(2)) .where(USER.USER_ID.eq(1))
.one(); .one();
``` ```
> 更多关于 `left join` 等 join 查询,请请点击 [这里](./relations-query.md#方案-3-join-query);
> 获取更多关于 `Joins Query` 的信息,请点击 [这里](./relations-query.md#方案-3-join-query)
- 通过 [Relations Query](./relations-query.md#方案-1relations-注解) 的方式查询数据:
- 通过 [@Relation](./relations-query.md#方案-1relations-注解) 相关注解查询数据:
```java ```java
User.create() User.create()
.where(USER.USER_ID.eq(2)) .where(USER.USER_ID.eq(1))
.oneWithRelations(); .withRelations() // 使用 Relations Query 的方式进行关联查询。
.maxDepth(3) // 设置父子关系查询中,默认的递归查询深度。
.ignoreRelations("orderList") // 忽略查询部分 Relations 注解标记的属性。
.extraCondition("id",100) // 添加额外的 Relations 查询条件。
.one();
``` ```
> 以上是用于查询 `一对多``多对多` 等场景,更多信息请点击 [这里](./relations-query.md#方案-1-relations-注解); > 获取更多关于 `Relations Query` 的信息,请点击 [这里](./relations-query.md#方案-1relations-注解)
- 通过 [Fields Query](./relations-query.md#方案-1relations-注解) 的方式查询数据:
```java
User.create()
.where(USER.USER_ID.eq(1))
.withFields() // 使用 Fields Query 的方式进行关联查询。
.fieldMapping(User::getRoleList,user-> // 设置属性对应的 QueryWrapper 查询。
QueryWrapper.create()
.select()
.from(ROLE)
.where(ROLE.ROLE_ID.in(
QueryWrapper.create()
.select(USER_ROLE.ROLE_ID)
.from(USER_ROLE)
.where(USER_ROLE.USER_ID.eq(user.getUserId()))
)))
.one();
```
> 获取更多关于 `Fields Query` 的信息,请点击 [这里](./relations-query.md#方案-2field-query)