【问题标题】:Knex.js One to Many table joinKnex.js 一对多表连接
【发布时间】:2022-01-21 04:37:25
【问题描述】:

场景:

引用表: first_name, email, estimate, etc.

quote_notes: id, note, quote_id

所以,引号有_many_quote_notes。在我的报价模型中进行查询时,我正在尝试加入它。

function getAllNotes() {
  return db('quote_notes')
    .select('quote_notes.id', 'note', 'quote_notes.created_at', 'quote_id')
    .join('quotes', 'quote_notes.quote_id', 'quotes.id')
    .orderBy('id')
}

每当我对路径执行 get 请求时,它都会返回我查看的任何报价的所有 quote_notes。

router.get('/:id/notes', (req, res) => {
  const {id} = req.params;

  Quotes.getAllNotes(id).then((users) => {
    res.status(200).json(users);
  });
});

这是我的参考请求:

const getQuoteNotes = async () => {
  let quoteNotes = await axiosWithAuth().get('/quotes/' + quoteId + '/notes');
  setQuoteNotes(quoteNotes.data);
  }

还有我的报价单:

table.bigInteger('quote_id')
      .unsigned()
      .index()
      .references('id')
      .inTable('quotes')

【问题讨论】:

    标签: javascript postgresql express join knex.js


    【解决方案1】:

    join 应该在 select 之前使用

    return db('quote_notes')
      .join('quotes', 'quotes.id','=', 'quote_notes.quote_id')
      .select('quote_notes.id', 'note', 'quote_notes.created_at', 'quote_id')
      .orderBy('id')
    

    您的最后一次编辑改变了事情,如果您只想要某些引用的注释,您应该通过quote_id查询注释

    db('quote_notes')
    .where('quote_id', quoteId )
    .orderBy('id')
    

    【讨论】:

    • 它仍然会在每个报价请求中返回它。 select 不一定要在 join 之后。我必须加入quotes 表上的quote_notes 还是quote_notes 上的quotes。
    • 糟糕,我编辑了.join('quotes', 'quotes.id','=', 'quote_notes.quote_id'),您只需要确保另一张表上的列名和ID 匹配,您是否将quote_notes.quote_id 设置为引号的外键?
    • 更新了我的问题
    • 非常感谢您的澄清,所以您是说不需要加入表格?
    • 连接查询返回的表数据以及来自另一个表的附加列,所以这不是您的情况的正确方法,假设您有一个带有 name 列和 @987654328 的 users 表@表有user_idquote_text列,可以用引号连接用户,获取用户名.select('users.name', 'quote.text')的引号数据
    猜你喜欢
    • 2016-06-21
    • 2019-10-24
    • 2018-09-10
    • 2020-05-25
    • 2021-02-01
    • 1970-01-01
    • 2014-01-17
    • 2017-09-24
    • 2021-08-23
    相关资源
    最近更新 更多