Как запросить sqflite несколько WhereArgs на флаттер? - PullRequest
0 голосов
/ 10 февраля 2020

Как я могу запросить несколько whereArgs? Я всегда возвращаю 1 ряд. должно вернуть 3 строки.

final res = await db.query(
  Constants.dbTable, 
  where: "name = ?",
  whereArgs: ['read', "uio", 'go'],  
);

Ответы [ 3 ]

1 голос
/ 10 февраля 2020

попробуйте использовать предложение IN:

final res = await db.query(
  Constants.dbTable, 
  where: "name IN (?, ?, ?)",
  whereArgs: ['read', 'uio', 'go'],  
);

Обновлено!

Для динамических c List<String> names вы можете попробовать использовать этот подход:

final res = await db.query(
  Constants.dbTable, 
  where: "name IN (${('?' * (names.length)).split('').join(', ')})",
  whereArgs: names,  
);
0 голосов
/ 12 апреля 2020

Вы можете сделать запрос следующим образом:

var names = ['read', "uio", 'go'];
final res = await db.query(
  Constants.dbTable, 
  where: "name IN (${names.join(',')})",
);

гдеArgs - необязательный аргумент. Если вы чувствуете, что формулировка выражения where с использованием whereArgs затруднительна, вы можете сделать заполнение собственным кодом. В этом примере проще заполнить список IN самостоятельно.

0 голосов
/ 10 февраля 2020

Я решил это, создав динами c? к где.

final res = await db.query(
  Constants.dbTable, 
  where: "name IN (${names.map((_) => '?').join(', ')})",
  whereArgs: names,  
);
...