如何进行嵌套查询或仅查找渡槽飞镖中是否存在外键

时间:2019-12-11 22:09:12

标签: dart aqueduct

我尝试了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);

是否可以通过数据库查询来做到这一点?

0 个答案:

没有答案