Objectbox dart:如何根据 ToOne 关系进行过滤?
Objectbox dart: how to filter based on a ToOne relation?
假设我有
@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().
docs 说甚至可以跨关系过滤数据,但我找不到方法。
要按商品价格为您的型号查询订单,您可以使用以下命令:
final ordersQuery = store.box<Order>().query()
..link(Order_.item, Item_.price < 100)
..build();
它的作用是:
- 首先创建一个没有条件的
QueryBuilder<Order>
(query()
没有参数)
- 然后创建一个 link 到
Item
(如果我们想深入 link 另一个实体,它会创建另一个查询构建器,在这种情况下我们不这样做)
- 然后在“根”
QueryBuilder
上调用 build()
,创建 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();
假设我有
@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().
docs 说甚至可以跨关系过滤数据,但我找不到方法。
要按商品价格为您的型号查询订单,您可以使用以下命令:
final ordersQuery = store.box<Order>().query()
..link(Order_.item, Item_.price < 100)
..build();
它的作用是:
- 首先创建一个没有条件的
QueryBuilder<Order>
(query()
没有参数) - 然后创建一个 link 到
Item
(如果我们想深入 link 另一个实体,它会创建另一个查询构建器,在这种情况下我们不这样做) - 然后在“根”
QueryBuilder
上调用build()
,创建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();