Flutter Objectbox dart:如何基于ToOne关系进行过滤?
假设我有Flutter Objectbox dart:如何基于ToOne关系进行过滤?,flutter,dart,objectbox,Flutter,Dart,Objectbox,假设我有 @Entity() class Order { int id; final item = ToOne<Item>(); final customer = ToOne<Customer>(); } @Entity() class Item { int id; int price; @Backlink() final orders = ToMany<Order>(); } @Entity() 阶级秩序{ int-id;
@Entity()
class Order {
int id;
final item = ToOne<Item>();
final customer = ToOne<Customer>();
}
@Entity()
class Item {
int id;
int price;
@Backlink()
final orders = ToMany<Order>();
}
@Entity()
阶级秩序{
int-id;
最后一项=ToOne();
最终客户=ToOne();
}
@实体()
类项目{
int-id;
国际价格;
@反向链接()
最终订单=ToMany();
}
如何根据物料价格查询过滤订单。我知道我可以查询项目并获得反向链接订单,但有可能采用其他方式吗?例如:
final orders = store.box<Order>().query(Order_.item.price < 100).build().
final orders=store.box()。
供应商表示,即使在关系中也会过滤数据,但我找不到方法。若要按型号的商品价格查询订单,您可以使用以下方法:
final ordersQuery=store.box().query()
..链接(订单项目,项目价格<100)
…构建();
它的作用是:
- 首先创建一个不带任何条件的
(没有用于QueryBuilder
的参数)query()
- 然后创建一个到
(如果我们想深度链接另一个实体,则会创建另一个查询生成器,在本例中我们不会这样做)项的链接
- 然后在“根”上调用
,创建QueryBuilder
Query
final ordersQueryBuilder=store.box().query();
ordersQueryBuilder.link(订单项目,项目价格<100);
final ordersQuery=ordersQueryBuilder.build();
然后,对于任一版本的代码,您都可以像往常一样使用查询:
final orders=ordersQuery.find();
//和往常一样,不要忘记关闭查询以释放资源
//我不再需要它了。如果您错过了它,查询是可重用的,因此您可以调用
//根据需要在ordersQuery上使用尽可能多的函数(在关闭()之前,它将一直工作)。
ordersQuery.close();
谢谢。成功了。你会如何做它的深层链接?就像按项目类别进一步筛选一样?我只做了以下操作:ordersQueryBuilder.link(Order\u0.item,item\u0.price<100)。link(item\u0.category,category\u0.id.equals(id));>这是一个多么棒的库啊,这正是深度链接的方式:)我还建议您查看测试代码,以了解使用该库的其他方式(Dart的文档仍然有点稀少):需要明确的是,在深度链接示例中,您实际上不必链接,因为您有ID-这是相同的:ordersQueryBuilder.link(订单项目、项目类别等于(id)和(项目价格<100))