Dart ObjectBox 嵌套查询未按预期工作
我有 ObjectBox 数据库,它运行得很好。但嵌套查询无法按预期工作
List<Channel> _channels({required String lang}) {
final queryBuilder = _channelBox().query();
queryBuilder.linkMany(
Channel_.category, ChannelCategory_.lang.equals(lang));
queryBuilder.linkMany(Channel_.name, ChannelName_.lang.equals(lang));
final query = queryBuilder.build();
final result = query.find();
query.close();
//
return result;
}
此查询返回所有语言,尽管有过滤器。
在这里演示这一点的单元测试
test("Channels for lang should have one language only", () {
DB.languages.forEach((lang) async {
(await db.channels(lang: "ar").first).forEach((channel) {
channel.category.forEach((cate) {
expect(cate.lang, "ar");
});
channel.name.forEach((name) {
expect(name.lang, "ar");
});
});
});
});
是我定义实体的方式
@Entity()
class Channel {
@Id()
int id = 0;
String url;
ToMany<ChannelName> name = ToMany();
ToMany<ChannelCategory> category = ToMany();
bool isFavorite = false;
}
@Entity()
class ChannelName {
@Id()
int id = 0;
String name;
String letter;
String lang;
@Backlink()
final ToMany<Channel> channel = ToMany();
}
@Entity()
class ChannelCategory {
@Id()
int id = 0;
String name;
String lang;
@Backlink()
final ToMany<Channel> channel = ToMany();
}
I have the ObjectBox database and it is working pretty well. But nested queries not working as expected
List<Channel> _channels({required String lang}) {
final queryBuilder = _channelBox().query();
queryBuilder.linkMany(
Channel_.category, ChannelCategory_.lang.equals(lang));
queryBuilder.linkMany(Channel_.name, ChannelName_.lang.equals(lang));
final query = queryBuilder.build();
final result = query.find();
query.close();
//
return result;
}
This query returns all languages although the filter.
A unit test to demonstrate this
test("Channels for lang should have one language only", () {
DB.languages.forEach((lang) async {
(await db.channels(lang: "ar").first).forEach((channel) {
channel.category.forEach((cate) {
expect(cate.lang, "ar");
});
channel.name.forEach((name) {
expect(name.lang, "ar");
});
});
});
});
here is how I defined my entities
@Entity()
class Channel {
@Id()
int id = 0;
String url;
ToMany<ChannelName> name = ToMany();
ToMany<ChannelCategory> category = ToMany();
bool isFavorite = false;
}
@Entity()
class ChannelName {
@Id()
int id = 0;
String name;
String letter;
String lang;
@Backlink()
final ToMany<Channel> channel = ToMany();
}
@Entity()
class ChannelCategory {
@Id()
int id = 0;
String name;
String lang;
@Backlink()
final ToMany<Channel> channel = ToMany();
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论