2025年3月新建支付宝云服务空间,联表查询,可以查出主表数据但却查不出副表关联的数据
2025年3月新建支付宝云服务空间,联表查询,可以查出主表数据但却查不出副表关联的数据
示例代码:
const articleDBName = 'uni-cms-articles'
const favoriteDBName = 'lmc-cms-favorite'
const db = uniCloud.database()
const _db1 = db.collection(articleDBName).where('article_status == "1" && note_type == 0 && is_secret_letter == false && which_sex_can_see == 0 && default_who_can_see == 0').field('category_id, title, content, _id, like_count, comment_status, comment_count, thumbnail, publish_date, note_type, article_status, is_secret_push').orderBy('publish_date desc').getTemp()
const _db3 = db.collection(favoriteDBName).field('article_id, _id, user_id').getTemp()
db.collection(_db1, _db3).get().then(res => {
console.log('res: ',res);
})
操作步骤:
- 新建支付宝云服务空间;
- b表
article_id
字段foreignKey指向a表_id
字段; - jql或者unicloud-db组件联表查询a、b表;
预期结果:
可以查出a表数据和关联的b表数据。
实际结果:
查出了a表数据,但未查出关联的b表数据。
bug描述:
一个旧账号去年买过免费的支付宝云服务空间一直在用没有什么问题,今年注册了新的dcloud账号并购买了一个付费和一个免费的支付宝云服务空间都有联表查询只能查出主表数据查不出副表关联数据的问题。
细节:
表'lmc-cms-favorite'
的article_id
字段的foreignKey指向了表'lmc-cms-favorite'
的_id
字段,两表进行联查,示例代码见下方。
期望的效果是附件1中开发文档截图的返回结构,但实际是附件2中控制台打印截图的返回结构:
1 回复
根据描述,问题可能出在以下几个方面:
- 外键关联配置问题。虽然您提到已经设置了foreignKey,但支付宝云服务空间2025年3月新建的版本可能有配置差异,建议重新检查:
- 确认
lmc-cms-favorite
表的article_id
字段foreignKey确实指向了uni-cms-articles
表的_id
字段 - 检查云服务空间控制台-数据库-表关系图中是否显示正确关联
- 权限问题。新创建的支付宝云服务空间默认权限可能不同:
- 确保副表
lmc-cms-favorite
的读权限已开放 - 检查安全规则是否限制了关联查询
- 数据问题:
- 确认副表中存在与主表关联的数据(article_id值确实对应主表_id)
- 测试单独查询副表是否能返回数据
- 临时解决方案: 可以尝试改用lookup方式显式指定关联条件:
db.collection(articleDBName)
.where('article_status == "1" && note_type == 0 && is_secret_letter == false && which_sex_can_see == 0 && default_who_can_see == 0')
.field('category_id, title, content, _id, like_count, comment_status, comment_count, thumbnail, publish_date, note_type, article_status, is_secret_push')
.orderBy('publish_date desc')
.lookup({
from: favoriteDBName,
localField: '_id',
foreignField: 'article_id',
as: 'favoriteData'
})
.get()