flutter moor - обновлять только указанные столбцы без специального запроса

Я хочу обновить только указанные столбцы при выполнении update(table).replace(model)он заменяет все данные, соответствующие первичному ключу. Как обновить только указанный столбец без написания пользовательских запросов.

2 ответа

Вы должны объявить свою функцию с помощью 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())));

В документации я обнаружил, что это может быть полезно в зависимости от вашего варианта использования. Вот как вы можете заменить значения одного столбца.

         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),
     ),
   );
 }
Другие вопросы по тегам