Objectbox dart:如何基于ToOne关系进行过滤



假设我有

@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>();
}

如何根据物料价格查询筛选订单。我知道我可以查询商品并获得反向链接订单,但反过来可能吗?例如:

final orders = store.box<Order>().query(Order_.item.price < 100).build(). 

文件上说,即使在关系中也会过滤数据,但我找不到方法。

要按型号的商品价格查询订单,可以使用以下命令:

final ordersQuery = store.box<Order>().query()
..link(Order_.item, Item_.price < 100)
..build();

它的作用是:

  • 首先创建一个没有条件的QueryBuilder<Order>(query()没有参数(
  • 然后创建一个到Item的链接(如果我们想深度链接另一个实体,它会创建另一个查询生成器,而在本例中我们没有这样做(
  • 则在"0"上调用CCD_ 4;根";QueryBuilder,创建Query<Order>

前面的代码相当于:

final ordersQueryBuilder = store.box<Order>().query();
ordersQueryBuilder.link(Order_.item, Item_.price < 100);
final ordersQuery = ordersQueryBuilder.build();

然后,使用任一版本的代码,您都可以像往常一样使用查询:

final orders = ordersQuery.find();
// As usual, don't forget to close the query to free up resources when you don't
// need it anymore. In case you missed it, queries are reusable so you can call 
// as many functions on ordersQuery as needed (it will work until you close()).
ordersQuery.close();

最新更新