如何在Flutter的Drift/Moor中使用Companion递增列值
Drift(Moor) 实现列值递增的API写法
要在Drift API中实现基于列当前值的递增,不能直接传入固定值,得用表达式来描述更新逻辑,正确代码如下:
await (_db.update(_db.items) ..where((e) => e.sequence.isBiggerOrEqualValue(insertAtSequence))) .write( ItemsCompanion( sequence: Value(Items.sequence + Constant(1)), ), );
核心要点:
Items.sequence是你定义的表列对象,直接引用它就代表该列的当前数据库值+ Constant(1)表示在当前值基础上加1,Drift会自动将这个表达式编译为SQL中的sequence = sequence + 1- 必须用
Value()包裹整个表达式,因为ItemsCompanion的字段要求为Value<T>类型,这样Drift才会识别这是动态的列值更新,而非传入一个固定数值
这种写法完全符合Drift的API规范,同时能保证你的数据流(streams)正常触发更新,不需要依赖自定义SQL语句。
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

