Flfter sqflite, получение данных из rawQuery - PullRequest
0 голосов
/ 16 января 2020

У меня есть следующий rawQuery

final maps = await db.rawQuery("""
select r.id, r.name, r.description,r.created_by,
a.id,a.name,a.description from Resources r 
left join Resource_Attribute ra on ra.resource_id = r.id
left join AttributeItems a on ra.attribute_id=a.id
""");

Мой вопрос: как мне получить данные из всех столбцов в моем запросе? Выполнение следующих действий

 maps.forEach((dbItem){
     String resourceId = dbItem["r.id"];

не похоже на работу. dbItems является картой, но содержит только четыре столбца в таблице Resources . dbItem ["r.id"] возвращает ноль.

dbItems содержит поле «строка», которое представляет собой массив со всеми полями. Есть ли способ получить к нему доступ?

Ответы [ 2 ]

0 голосов
/ 17 января 2020

Как предложил alextk, я изменил свой запрос на

    select r.id as resource_id, r.name as resource_name, r.description as resource_descr,r.created_by as resource_created_by,
a.id as attribute_id,a.name as attribute_name,a.description as attribute_descr from Resources r 
left join Resource_Attribute ra on ra.resource_id = r.id
left join AttributeItems a on ra.attribute_id=a.id

, и это помогло.

0 голосов
/ 17 января 2020

Если вы посмотрите на dbItem.keys, вы увидите, что это ['id','name',...], а не ['r.id','r.name'].

. Вы можете получить доступ к своему идентификатору ресурса, используя:

var resourceId = dbItem['id'] as String;

. Вы можете назовите столбец явно, используя AS. Например:

var resultSet = await db.rawQuery("SELECT r.id AS r_id FROM test r");
// Get first result
var dbItem = resultSet.first;
// Access its id
var resourceId = dbItem['r_id'] as String;
...