多对多字段本身不能作为条件筛选,但是支持选择多对多关联表内的字段作为筛选条件。
注意:仅 MySQL 数据库支持多对多关联关系,如你的底层不是 MySQL 数据库,则无法创建。
你可以在对应模型的基础信息中查看数据库类型。
一、数据模型
学生表和课程表之间存在多对多关联关系,学生表中关联字段为学生选课(xsxk)。
学生表:
关联关系配置:
课程表:
关联关系配置:
二、查询条件
下面以 APIs 自定义方法为例,介绍如何配置查询条件,该查询以学生表为主表,课程表为关联表。
三、查询选课中包含语文课的学生名单
查询条件:
module.exports = async function (params, context) { const result = await context.callModel({ name: 'xsb_rx0zqhc', // 数据模型标识,可以前往「数据源 – 数据模型」列表页查看 methodName: 'wedaGetRecordsV2', // 数据模型方法标识 params: { filter: { where: { }, relateWhere:{ // 关联表查询 xsxk:{ // 学生表中的关联字段 where:{ kcmc:{ // 课程表中需要查询的字段名称 $in: ["语文"] } } } } }, // 排序 orderBy: [ { createdAt: "desc", // 创建时间,倒序 }, ], // 返回字段选择 select: { $master: true, // 返回主表中的字段 xsxk: true // 返回关联字段内容 }, // 返回total字段 getCount: true, // 页面大小 pageSize: 10, // 当前页面 pageNumber: 1, }, }); // 在这里返回这个方法的结果,需要与出参定义的结构映射 return result;};
查询结果:
{ "total": 2, "records": [{ "owner": "1534736158943625218", "createdAt": 1694070086572, "createBy": "1534736158943625218", "updateBy": "1534736158943625218", "xsxk": [{ "owner": "1534736158943625218", "createdAt": 1693972871239, "createBy": "1534736158943625218", "updateBy": "1534736158943625218", "_id": "7UF1G8XKK6", "kcmc": "语文", "updatedAt": 1693972871239 }], "xsxm": "张三", "_id": "7UNM87D3FW", "updatedAt": 1694070086572 }, { "owner": "1534736158943625218", "createdAt": 1693972984077, "createBy": "1534736158943625218", "updateBy": "1534736158943625218", "xsxk": [{ "owner": "1534736158943625218", "createdAt": 1693972871239, "createBy": "1534736158943625218", "updateBy": "1534736158943625218", "_id": "7UF1G8XKK6", "kcmc": "语文", "updatedAt": 1693972871239 }], "xsxm": "李四", "_id": "7UF1SESBCC", "updatedAt": 1693972984077 } ]}
四、查询张三英语课的选课记录
查询条件:
module.exports = async function (params, context) { const result = await context.callModel({ name: 'xsb_rx0zqhc', // 数据模型标识,可以前往「数据源 – 数据模型」列表页查看 methodName: 'wedaGetRecordsV2', // 数据模型方法标识 params: { filter: { where: { // 主表查询 $and: [{ xsxm: { // 学生表中需要查询的字段名称 $eq: "张三" } }] }, relateWhere:{ // 关联表查询 xsxk:{ // 学生表中的关联字段 where:{ kcmc:{ // 课程表中需要查询的字段名称 $in: ["英文"] } } } } }, // 排序 orderBy: [ { createdAt: "desc", // 创建时间,倒序 }, ], // 返回字段选择 select: { $master: true, // 返回主表中的字段 xsxk: true // 返回关联字段内容 }, // 返回total字段 getCount: true, // 页面大小 pageSize: 10, // 当前页面 pageNumber: 1, }, }); // 在这里返回这个方法的结果,需要与出参定义的结构映射 return result;};
查询结果:
{ "total": 1, "records": [{ "owner": "1534736158943625218", "createdAt": 1694072317951, "createBy": "1534736158943625218", "updateBy": "1534736158943625218", "xsxk": [{ "owner": "1534736158943625218", "createdAt": 1693972887373, "createBy": "1534736158943625218", "updateBy": "1534736158943625218", "_id": "7UF1HQD1QL", "kcmc": "英文", "updatedAt": 1693972887373 }], "xsxm": "张三", "_id": "7UNT5CS91A", "updatedAt": 1694072317951 }]}