Как подсчитать записи в таблице sqlite db с помощью пакета moor_flutter?
Как подсчитать все строки в таблице и получить в результате количество строк с помощью пакета moor_flutter?
Я видел moor_flutter официальной документации здесь, но я не могу найти то, что я ищу.
Я надеялся, что это будет похоже на функцию ниже в соответствии с сходством в функциях crud при использовании пакета moor_flutter, но он тоже не работает.
Future<List<Person>> countPersons() => count(persons).get();
5 ответов
Я нашел способ найти количество строк таблицы. Вот полное решение с основными комментариями,
//Create expression of count
var countExp = persons.id.count();
//Moor creates query from Expression so, they don't have value unless you execute it as query.
//Following query will execute experssion on Table.
final query = selectOnly(persons)..addColumns([countExp]);
var result = await query.map((row) => row.read(countExp)).getSingle();
Обратите внимание, что я использовал
selectOnly
вместо
select
потому что меня не интересует никакой столбец, кроме графа.
Если вам нужно условие фильтра для вашего подсчета, вы можете вызвать функцию верхнего уровня
countAll
с указанным параметром
filter
как вы можете видеть ниже.
var count = countAll(filter: persons.id.isSmallerThanValue(100));
var res = await (selectOnly(persons)..addColumns([count]))
.map((row) => row.read(count))
.getSingle();
Теперь это задокументировано в официальной документации.
Нет такого заявления в moor_flutter
(только select
, into
, update
а также delete
).
Это должно работать:
Future<int> countPersons() async {
return (await select(persons).get()).length;
}
или (точно так же, но с одной строкой)
Future<int> countPersons() async => (await select(persons).get()).length;
Или вы можете попробовать написать собственные запросы SQL.
Канонический мавровский путь меня немного сбивает с толку. Если вы чувствуете то же самое, вы можете пойти по старой школе и попробовать:
@UseDao(
tables: [Instruments],
queries: {
'instrumentsCount': 'SELECT COUNT(*) FROM instruments;'
},
)
Final numberOfPersons = person.id.count();