【问题标题】:TypeORM: how to .find() exact match?TypeORM:如何 .find() 精确匹配?
【发布时间】:2021-04-07 22:56:51
【问题描述】:

我正在编写一个 TypeORM 解析器来删除具有以下代码的实体:

  • 数据库中的图书架构: id | idInAPI | userId
  • 用户是多对一关系的另一端
  • 删除图书查询参数是 idInAPI 和上下文(用于获取用户)。

const { userId } = req.session; // current user taken from cookie
    
const book= await Book.findOneOrFail({ where: [{ user: userId }, { idInAPI: bookId }] });
const response = await Book.delete(book.id);
    

代码确实删除了我数据库中的一本书,但我的问题是.find() 查找的是近似值而不是确切的值,所以如果我尝试删除 id 为 12 的书,则可能会得到 id 为 1234 的书已删除。

如何强制 find 查找用户和图书的完全匹配?

【问题讨论】:

    标签: node.js typeorm


    【解决方案1】:

    问题是您正在使用findOneOrFail 方法。您应该使用find() 方法,这将搜索完全匹配

    【讨论】:

    • 好像是一样的。如果我尝试删除 id 为 1 的游戏,它会返回所有 id 为 1 的游戏(123、133、143...)。我想同样的事情也发生在用户身上。我正在尝试删除具有唯一 user_id - book_id 元组的书(可以重复自己的书和用户)。
    【解决方案2】:

    通过使用以下语法将参数直接传递给.delete() 来解决它:

    const response = await Book.delete({ idInAPI: bookId, user: { id: userId } });
    

    【讨论】:

      猜你喜欢
      • 2021-03-19
      • 1970-01-01
      • 1970-01-01
      • 2022-07-01
      • 2012-07-22
      • 1970-01-01
      • 2016-04-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多