我尝试了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);
是否可以通过数据库查询来做到这一点?