5

我只想更新指定的列,当我执行update(table).replace(model)它时,它会替换与主键对应的所有数据。如何只更新指定的列而不编写自定义查询。

4

2 回答 2

3

你必须Insertable像这样声明你的函数:

Future updateVisit(Insertable<Visit> visit) => update(visits).replace(visit);

所以,当你调用一个函数时,你可以这样做:

visitDao.updateVisit(visit.copyWith(completed: newValue))

或者

visitDao.updateVisit(VisitsCompanion(id: Value(visitId), checkOut: Value(DateTime.now())));
于 2020-01-31T11:40:22.490 回答
2

在文档中,我发现这可能会有所帮助,具体取决于您的用例。这就是您可以替换单个列的值的方式。

   Future moveImportantTasksIntoCategory(Category target) {
     // for updates, we use the "companion" version of a 
     generated class. This wraps the
     // fields in a "Value" type which can be set to be absent using "Value.absent()". This
     // allows us to separate between "SET category = NULL" 
    (`category: Value(null)`) and not
    // updating the category at all: `category: Value.absent()`.

    return (update(todos)
     ..where((t) => t.title.like('%Important%'))
      ).write(TodosCompanion(
      category: Value(target.id),
     ),
   );
 }
于 2021-07-20T22:35:38.120 回答