KNEX:如何使用join从外键获取嵌套数据?

时间:2019-07-05 18:33:11

标签: node.js knex.js

我一直在尝试使用查询来构造访存调用,以返回数据库中两个表之间的联接数据。我有一个用于项目的表,另一个用于调色板,其中包含外键“ project_id”。

以下是到目前为止我尝试过的许多无效的迭代之一(到目前为止可能已经很混乱了)。我尝试了一段时间,然后完全放弃了,因为同名字段相互覆盖。

我也无法弄清楚如何将调色板数据嵌套在项目数据中,这也可以解决名称覆盖的问题。最后,我到了这一点,只是完全忘记了连接,而是试图手动构建输出,但是我没有得到数据,甚至没有任何错误消息。

      .select()
      .then(projects => {
        return projects.map(async project => {
          return database('palettes')
            .where({ project_id: project.id })
            .then(palettes => ({ ...project, palettes }))
        })
      }).then(projects => res.status(200).json(projects))
        .catch(error => res.status(500).json({ error }))```

1 个答案:

答案 0 :(得分:0)

您未提供数据库类型和架构结构。

假设:projects (project_id, name)palettes (palette_id, name, project_id)

并且您想查找与其1:1palette关系的所有项目,这就足够了:

knex
  .select(
    'projects.project_id',
    'projects.name as project_name',
    'palettes.palette_id',
    'palettes.name as palette_name'
  )
  .from('projects')
  .innerJoin('palettes', 'projects.project_id', 'palettes.project_id')