首页 文章

sequelize(js)关联多个列与一个表

提问于
浏览
0

希望你做得很好 .

我有sequelizejs的问题,无论我如何在表之间 Build 关联,我都无法出于某种原因开始工作 . 我的问题是,我有一个名为 Results 的表,这个表有一个结构:

| id (primary) | first_guy_id | second_guy_id | third_guy_id | notes |
|--------------|--------------|---------------|--------------|-------|
|              |              |               |              |       |

这个表连接到 Users ,这里有趣的部分,表 Users 有一个简单的结构,就像这样

| id (primary) | first | last |
|--------------|-------|------|
|              |       |      |

我想用sequelize做的是,得到一个看起来与此类似的结果(在json之后),用连接嵌套:

{
  "id": 17,
  "first_guy_id": { "id": 12, "first": "First .... },
  "second_guy_id": { "id": 14, "first": "First .... },
  "third_guy_id": { "id": 19, "first": "First .... },
  "notes": "notes",
}

在常规SQL中执行SQL JOIN很容易,即使每列的所有id(first_guy,second ...)都不同但在sequelize中达到这样的目标,我自己完全没有希望 .

当我以这种方式关联这两个表时:

Results.hasOne(User, { as:'first_guy', foreignKey: 'first_guy' });
User.belongsTo(Results, { as: 'first_guy' });

使用时进行实际通话

findOne ...
   include: [
        { model: User,
          include: [
            {
              model: User,
              as: 'first_ugy',
              where: {
                    'id': sequelize.col('Results.first_guy_id')
              },
            }
          ],
        },

我得到一个错误:

ER_BAD_FIELD_ERROR: Unknown column 'Results.user_id' in 'field list'

这当然是因为它将user_id作为外键查找,连接到表“User”,它认为键应该是user_id .

我找到这个解决方案的两个问题是:

  • 如何使用sequelize在任何字段上加入结果,与使用常规SQL(此处为伪代码)的方式相同“ INNER JOIN User.id on Results.first_guy_id as MY_FIELD_NAME

  • 如何将所有这些字段连接到同一模型,但每列的结果不同?因此, Results 的get结果将返回嵌套的3个不同用户,这些用户的ID在该特定行的 Results 表中列出 . 使用相同的型号?

我经历了续集的文档,尝试了许多组合,但从未实现结果 . 它几乎感觉就像我必须最终编写模型,这些模型的名称就像那些字段"First_gu","second_guy","third_guy"用于Sequalize工作并自动追加"_id"就像它现在与 User 模型一样 . 但对于应该通过belongsTo / hasOne中的"foreignKey"属性解决的问题,感觉太过分了吗?

1 回答

  • 2

    这是一个简单的解决方案 . 您应该为每个结果的列定义关系 .

    Results.belongsTo(User, { as:'firstGuy', foreignKey: 'first_guy_id'});
    Results.belongsTo(User, { as:'secondGuy', foreignKey: 'second_guy_id'});
    ...
    

    然后你可以像这样查询:

    Results.findById(resultId, {
       include: [{
          model: User,
          as: 'firstGuy'
       }, {
          model: User,
          as: 'secondGuy'
       },
       ...
       ]
    }).then(function(result){
       var firstGuyUser = result.firstGuy;
    });
    

相关问题