Knex.js PostgreSQL 列引用“id”不明确

Mat*_*don 4 postgresql node.js knex.js

我试图使用 knex.js 从数据库中的集合中选择单个项目,但出现了错误,column reference "id" is ambiguous我认为该错误来自选择表和连接表上的 id 属性。

尝试完成填充引用库存项的单个菜单项。

我有一个menu_items表,其中保存对 a priceIditemId和 a 的引用menuId

引用itemId库存项目,其中包含菜单项所需的相关信息。

现在我有这个疑问。

async function getMenuItem({ menuItemId }) {
  let menuItem = await db('menu_items')
    .where({ id: menuItemId })
    .first()

  return menuItem ? menuItem : null
}
Run Code Online (Sandbox Code Playgroud)

产生这个对象

{ 
 id: '06e0472c-f805-4dc7-bdd4-867e823e44f6',
 menuId: '99cca00e-cb43-4423-ab6c-2ed01a329e15',
 itemId: '94ff9e9b-9fec-4026-b735-b326f3f3b88f',
 priceId: 'be5a9e89-f04c-4320-8049-2087179732c2',
 created_at: 2019-10-12T21:09:55.394Z,
 updated_at: 2019-10-12T21:09:55.394Z 
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试过这个查询

async function getMenuItem({ menuItemId }) {
  let menuItem = await db('menu_items')
    .where({ id: menuItemId })
    .leftJoin('items', 'menu_items.itemId', 'items.id')
    .first()

  return menuItem ? menuItem : null
}
Run Code Online (Sandbox Code Playgroud)

尝试以下代码片段会产生相同的错误

  const menuItem = await db
    .select(
      'id as m_id',
      'menuId',
      'priceId',
      'itemId',
    )
    .from('menu_items')
    .where({ id: menuItemId })
    .leftJoin('items', 'menu_items.itemId', 'items.id')

Run Code Online (Sandbox Code Playgroud)

我希望输出显示这个单个菜单项,我真的可以在这里使用一些指导或关于如何使其正常工作的建议。

Meh*_*dad 6

您没有在 where 子句中指定哪个 id 。尝试将其写为:

async function getMenuItem({ menuItemId }) {
  let menuItem = await db('menu_items')
    .where({ 'menu_items.id': menuItemId })
    .leftJoin('items', 'menu_items.itemId', 'items.id')
    .first()

  return menuItem ? menuItem : null
}
Run Code Online (Sandbox Code Playgroud)

因为 menu_items 和 items 都有一个名为 id 的列,所以您应该指定您所引用的 id。