Node.js 如何在objectionjs中在同一个表上定义多个关系?

Node.js 如何在objectionjs中在同一个表上定义多个关系?,node.js,postgresql,objection.js,Node.js,Postgresql,Objection.js,我有一个文章表,一篇文章可以引用多篇文章。每篇文章也可以有一位作者 文章范本: 类文章扩展了DefaultModel{ 静态get tableName(){ 归还“物品”; } 静态get relationMappings(){ 返回{ 作者:{ 关系:DefaultModel.BelongsToOneRelation, 模型类:“作者”, 加入:{ 来自:“articles.authord”, 致:“authors.id” } }, 提到:{ 关系:DefaultModel.ManyToMan

我有一个文章表,一篇文章可以引用多篇文章。每篇文章也可以有一位作者

文章范本:

类文章扩展了DefaultModel{
静态get tableName(){
归还“物品”;
}
静态get relationMappings(){
返回{
作者:{
关系:DefaultModel.BelongsToOneRelation,
模型类:“作者”,
加入:{
来自:“articles.authord”,
致:“authors.id”
}
},
提到:{
关系:DefaultModel.ManyToManyRelation,
模型类:“文章”,
加入:{
发件人:“articles.id”,
通过:{
摘自:“提及.城市文章”,
致:“提及。城市文章”
},
致:“articles.id”
}
}
};
}
}
提及模型:

类模型{
静态get tableName(){
返回“提及”;
}
静态获取idColumn(){
返回[“citingArticle”、“citedArticle”];
}
}
我想做的是insertGraph,主要文章+其中提到的文章,以下是我的:

异步函数insertData(全文){
const articleTx=等待事务(Article.knex(),async tx=>{
const references=fullArticle.references
.map(articleObj=>{
返回{
…articleObj,
作者:articleObj.author
};
});
const article=wait article.query(tx).insertGraph({
…全文,
作者:fullArticle.author,
提及:参考文献[0]
});
退货物品;
});
控制台日志(articleTx);
}
我知道这只是插入主行+第一行,但我遇到了多个问题:

  • 提及模型有一个复合键,当我尝试使用上面的代码插入时,我会得到一个
    (节点:5944)未处理的Promisejection警告:错误:关系“提及”的列“citedArticle”不存在
  • 当我尝试将
    “#id”
    添加到主要文章提及关系中,并将
    “#ref”
    添加到引用的文章中,并将它们插入两个不同的对象中时,我也遇到了相同的错误
  • 我在这里遇到的第三个问题,是引用和引用文章作者的独特限制。如果这两本书都是同一位作者写的呢?我在authors表中有一个唯一的字符串列,它不是id,当我尝试插入时,我得到的重复键值违反了唯一约束“author\u is”。如果发生这种情况,我不确定如何更新行以引用现有的作者id

  • 您不必这样设置提及
    id列。指定模型数据库表的唯一id列。@Rashmon但该表的pkey是这两个id的组合,我从这里得到该声明: