La documentation de Knex sur les transactions contient un code qui ressemble à ceci :
knex.transaction(function(trx) {
var books = [
{title: 'Canterbury Tales'},
{title: 'Moby Dick'},
{title: 'Hamlet'}
];
return trx
.insert({name: 'Old Books'}, 'id')
.into('catalogues')
.then(function(ids) {
return Promise.map(books, function(book) {
book.catalogue_id = ids[0];
// Some validation could take place here.
return trx.insert(info).into('books');
});
});
})
Sur SO, j'ai constaté l'utilisation intensive d'une fonction transacting()
avec des exemples qui ressemblent à ceux-ci :
knex.transaction(function(trx) {
knex('foo')
.transacting(trx)
.insert({id:"bar", username:"bar"})
// etc
})
Knex décrit transacting()
avec des exemples similaires à ceux cités ci-dessus :
Utilisée par knex.transaction, la méthode transacting peut être enchaînée à n'importe quelle requête et passer l'objet que vous souhaitez joindre à la requête en tant que partie de la transaction.
Ma question est la suivante :
Quelle est la différence entre trx.insert().into('foo')
y knex('foo').transacting(trx).insert()
et pourquoi utiliser l'un plutôt que l'autre ?