Sequelize中同表多关联场景下如何设置文章owner关联?
解决Sequelize中设置Article Owner关联的问题
这个问题我之前也踩过坑,本质是Sequelize对多关联同名方法的优先级匹配问题~你现在调用user.addArticle(article, {as: 'owner'})时,Sequelize默认匹配了多对多的article_contributors关联,而非你想要的owner一对多关联——因为belongsToMany生成的实例方法就是addArticle,而带as: 'owner'的hasMany关联不会默认触发这个方法名。
下面两种方法都能解决问题,选你顺手的就行:
方法一:使用hasMany关联生成的专属实例方法
当你定义User.hasMany(Article, { as: 'owner' })时,Sequelize会自动给User实例生成精准对应的添加方法:addOwner()(添加单个实例)和addOwners()(批量添加)。直接调用这个方法就能操作owner关联,完全不会碰多对多的中间表:
user.addOwner(article);
方法二:在addArticle中明确指定关联别名
如果你习惯用addArticle的写法,可以通过association参数明确告诉Sequelize要操作的关联别名,避开默认的多对多关联:
user.addArticle(article, { association: 'owner' });
最后别忘了确认你的Article模型里已经正确定义了ownerId外键字段哦,不然就算方法正确,数据库也没有对应的字段存储关联关系~
内容的提问来源于stack exchange,提问作者Marie Pelletier
相关产品推荐
相关产品推荐

