1

我尝试了 5 个小时,但我找不到解决方案。我想要一个嵌套查询,用于多对多关系。如果我再次使用我的 User、Books、userBooksLikes 示例。(为了更好地理解:我想在 userBookLikes 表中跟踪哪个用户喜欢什么书。它有两个外键,来自 Books 和 Users 的 ID。)我想查询不存在 Like 的书。所以我需要一个这样的 SQL 查询:

SELECT * FROM Book WHERE id NOT IN (SELECT bookID from userBooksLikes WHERE userID = givenUserID)

或者类似的东西。我在文档中发现的唯一可能是

final q = Query<Parent>(context)
  ..where((c) => c.children.haveAtLeastOneWhere.age).greaterThan(1);
  ..join(set: (p) => p.children);

final parentsWithOlderChildren = await q.fetch();

但这似乎行不通。我现在通过在获取后删除数据来做到这一点,但我没有这个比例。

final bookQuery = Query<Book>(context);
   userID = 1;
   bookQuery
     .join(set: (e) => e.usrBookLikes).returningProperties((ubl) => [ubl.user.id]);

   final books = await BookQuery.fetch();
   books.forEach((e) => e.usrBookLikes.removeWhere((e) => e.user.id != userId));
   books.removeWhere((e) => e.usrBookLikes.isNotEmpty);
   books.forEach((e) => e.removePropertiesFromBackingMap(["usrBookLikes"]));
   return Response.ok(books);

有没有办法通过数据库查询来做到这一点?

4

0 回答 0