我尝试了 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);
有没有办法通过数据库查询来做到这一点?