You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 10:01:26