uni-app Dbchema 自动生成的关联查询条件有错误。

uni-app Dbchema 自动生成的关联查询条件有错误。

示例代码:

idcard.schema.json

{
"bsonType": "object",
"required": [],
"permission": {
"read": false,
"create": false,
"update": false,
"delete": false
},
"properties": {
"_id": {
"description": "ID,系统自动生成"
},
"name":{
"bsonType": "string",
"label": "证件名称",
"description": "请输入证件名称"
}
}
}

person.schema.json

{
"bsonType": "object",
"required": [],
"permission": {
"read": false,
"create": false,
"update": false,
"delete": false
},
"properties": {
"_id": {
"description": "ID,系统自动生成"
},
"name": {
"bsonType": "string",
"label": "姓名",
"description": "请输入姓名"
},
"idcard": {
"bsonType": "string",
"description": "请选择关联证件",
"label": "关联证件",
"foreignKey": "idcard._id",
"enumType": "tree",
"enum": {
"collection": "idcard",
"field": "_id as value,name as text"
}
}
}
}

操作步骤:

1

预期结果:

1

实际结果:

1

bug描述:

新建了2张表,一张是person表,一张是idcard表。其中person表中有个外键关联idcard表。在定义好schema后,通过自动生成代码,发现person表的外键字段显示不正确。它显示的居然是自己的name字段。而我定义的是关联idcard的name字段。 然后回头去看生成的代码中,发现查询代码错误。


更多关于uni-app Dbchema 自动生成的关联查询条件有错误。的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

生成的代码看起来没错, 连接的本地云函数还是云端云函数?如果是本地HBuilderX版本是多少?如果是云端上传一个schema触发下云端更新看看

更多关于uni-app Dbchema 自动生成的关联查询条件有错误。的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在使用 uni-appDbchema 进行自动生成关联查询条件时,如果发现有错误,可能是由于以下几个原因导致的。以下是一些常见的排查和解决方法:


1. 检查数据表关联关系

  • 问题原因: Dbchema 的关联查询依赖于数据表之间的外键关系。如果外键定义不正确或缺失,自动生成的查询条件可能会出错。
  • 解决方法:
    • 确保数据表之间存在正确的外键关系。
    • Dbchema 中明确定义关联关系,例如 hasManybelongsTo 等。

2. 检查字段命名规范

  • 问题原因: 如果字段命名不符合 Dbchema 的默认规则,可能会导致关联查询条件生成错误。
  • 解决方法:
    • 确保外键字段的命名符合规范,例如 user_id 对应 User 表的 id
    • 如果字段命名不符合默认规则,可以在 Dbchema 中手动指定关联字段。

3. 检查 Dbchema 配置

  • 问题原因: Dbchema 的配置可能不正确,导致生成的查询条件不符合预期。
  • 解决方法:
    • 检查 Dbchema 的关联配置,确保 foreignKeylocalKey 等参数设置正确。
    • 例如:
      {
        "tableName": "orders",
        "relations": {
          "user": {
            "type": "belongsTo",
            "foreignKey": "user_id",
            "localKey": "id"
          }
        }
      }
      

4. 手动调整查询条件

  • 问题原因: 自动生成的查询条件可能无法满足复杂业务需求。
  • 解决方法:
    • 在代码中手动调整查询条件,覆盖自动生成的部分。
    • 例如:
      const orders = await db.collection('orders')
        .where('user_id', '==', userId)
        .get();
      

5. 检查数据库数据

  • 问题原因: 数据库中的数据可能存在问题,例如外键字段的值不匹配。
  • 解决方法:
    • 检查相关数据表,确保外键字段的值正确且存在对应的主键记录。

6. 更新 Dbchema 版本

  • 问题原因: 使用的 Dbchema 版本可能存在已知的 bug。
  • 解决方法:
    • 更新 Dbchema 到最新版本,确保使用的是最新的功能和修复。

7. 调试和日志

  • 问题原因: 自动生成的查询条件可能不符合预期,但具体原因不明确。
  • 解决方法:
    • 打印生成的查询条件,检查是否符合预期。
    • 例如:
      console.log(db.collection('orders').getQuery());
回到顶部