2017-01-11 2 views
1

Вот запрос, я работаю над:Как получить список всех обновленных записей в knex/MySQL

return knex('table') 
    .returning('id') 
    .where('boolean', false) 
    .andWhere('fooID', foo.id) 
    .update({ 
     boolean : true 
    }) 
    .limit(num) 
    .then(function(ids) { 
     console.log('\nids'); 
     console.log(ids); //outputs num 

ids теперь содержит 3, что число пострадавших строк. Есть ли способ получить идентификаторы этих трех рядов? Я был под впечатлением .returning() сделал это, но похоже, что нет.

ответ

3

База данных Mysql не поддерживает оператор returning и возвращает только количество обновленных строк http://dev.mysql.com/doc/refman/5.7/en/update.html.

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

Как это:

return knex.transaction(trx => { 
    return trx('table') 
    .select('id') 
    .where('boolean', false) 
    .andWhere('fooID', foo.id) 
    .limit(num) 
    .then(ids => { 
     return trx('table').update({ boolean: true }) 
     .whereIn('id', ids) 
     .then(() => { 
      return trx('table').whereIn('id', ids); 
     }); 
    }); 
}); 
Смежные вопросы