WatermelonDB设置关联字段报错:Cannot read property 'set' of undefined
问题排查与解决
错误原因
club.user为undefined,导致调用set()时抛出错误,核心问题出在Club模型的关联配置不匹配:
- Club模型的
static associations中,belongs_to的键名写成了users(复数),但模型内定义的关联属性是user(单数),二者不对应,导致WatermelonDB无法正确初始化club.user关联对象。 - 在
create回调中,新创建的模型实例的关联属性可能尚未完全初始化,直接调用set()会出现未定义的情况。
解决方法
方法一:修正Club模型的关联配置
将Club模型的associations中belongs_to的键名从users改为user,与模型内的@relation属性名保持一致:
class Club extends Model { static table = 'clubs'; static associations = { // 把users改成user,和@relation定义的属性名匹配 user: { type: 'belongs_to', key: 'user_id' }, groups: { type: 'has_many', foreignKey: 'club_id' }, } // ... 其他属性不变 @relation('users', 'user_id') user; // ... 其他属性不变 }
方法二:直接设置外键(更稳妥的方式)
在创建Club时,直接赋值外键user_id而非调用关联对象的set()方法,避免关联属性未初始化的问题:
@writer async addClub(name, location) { const newClub = await this.collections.get('clubs').create( club => { // 直接设置外键,使用当前用户的id club.user_id = this.id club.name = name club.location = location }) return newClub }
额外验证点
- 确认数据库表
clubs中存在user_id字段,且类型与users表的主键类型一致。 - 确保Babel装饰器配置正确(当前配置的
legacy模式符合WatermelonDB要求)。
内容的提问来源于stack exchange,提问作者Bessoufi Mounir
相关产品推荐
相关产品推荐

