首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何利用用户自定义视图将数据导入颤振/漂移(沼地)应用程序

如何利用用户自定义视图将数据导入颤振/漂移(沼地)应用程序
EN

Stack Overflow用户
提问于 2022-03-02 08:53:52
回答 1查看 352关注 0票数 0

除了数据库表定义之外,我还按照漂移文档中的示例声明了一些视图,并成功地完成了生成过程。之后,我对抽象视图类的用法感到非常困惑,我既不能实例化这些类,也不能将其合并到查询定义中(get或watch)。

代码语言:javascript
复制
abstract class TestingRemoteSignalView extends View {
  TestingRemoteSignal get testingRemoteSignal;
  Bay get bay;
  RemoteSignal get remoteSignal;
  Expression<String> get description => bay.name + remoteSignal.signalName;

  @override
  Query as() {
    return select([
      testingRemoteSignal.id,
      bay.name,
      description,
      testingRemoteSignal.passed,
      testingRemoteSignal.skipped,
      testingRemoteSignal.touched,
      testingRemoteSignal.memo,
    ]).from(testingRemoteSignal).join([
      innerJoin(bay, testingRemoteSignal.bay.equalsExp(bay.id)),
      innerJoin(
          remoteSignal, testingRemoteSignal.signal.equalsExp(remoteSignal.id))
    ]);
  }
}

这些View类的用途是什么,以及如何利用它们进行查询?也许是这样:

代码语言:javascript
复制
final query = select(TestingRemoteSignalView)..where((t) => t.passed.isEquals(true));
query.watch();
EN

回答 1

Stack Overflow用户

发布于 2022-10-19 19:35:43

漂移文档中的这个页面有一个关于视图这里的部分。我发现Youtube上的视频也很有帮助。

按照问题中的内容创建视图代码后,需要将视图添加到数据库定义中,如下所示(从文档中):

代码语言:javascript
复制
@DriftDatabase(tables: [Todos, Categories], views: [CategoryTodoCount])
class MyDatabase extends _$MyDatabase { 

然后,您需要删除和重建您的'.g.dart‘文件。

然后,您应该能够像任何其他表一样访问查询中的视图。下面是我自己代码中的一个示例:

视图定义

代码语言:javascript
复制
abstract class FrequencyView extends View {
  Frequency get frequency;
  Instrument get instrument;
  Range get range;

  @override
  Query as() => select([
        frequency.id,
        frequency.type,
        frequency.start,
        frequency.end,
        instrument.iname,
        range.rname
      ]).from(frequency).join([
        innerJoin(instrument, instrument.id.equalsExp(frequency.instrumentID))
      ]).join([innerJoin(range, range.id.equalsExp(frequency.rangeID))]);
}

// FrequencyView declared in DraftDatabase declaration below...
@DriftDatabase(tables: [Frequency, Range, Instrument], views: [FrequencyView])
class MyDatabase extends _$MyDatabase {
  // we tell the database where to store the data with this constructor
  MyDatabase() : super(_openConnection());

  // you should bump this number whenever you change or add a table definition.
  // Migrations are covered later in the documentation.
  @override
  int get schemaVersion => 1;
}

顺便说一句,在不同的表(' name ')中有相同名称的字段,这会在重新构建.g.dart文件后导致错误。我不确定您是否可以在视图中别名列名,所以我只给出了它们的所有唯一名称。

视图选择查询

代码语言:javascript
复制
import 'package:drift/drift.dart' as drift;

Future<List<FrequencyViewData>> _getFrequencyPlus(MyDatabase db) async {
  List<FrequencyViewData> values = await (db.select(db.frequencyView)
        ..orderBy([(t) => drift.OrderingTerm(expression: t.start)]))
      .get();

  return values;
}

此查询返回完整的数据集。我假设您可以在其中添加"where“子句,就像单个表上的标准select子句一样,以获得部分返回。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71319847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档