Juste un peu confus quant à la raison pour laquelle cette méthode magique renvoie null. C'est probablement très simple, mais j'utilise des méthodes que je n'utiliserais pas normalement (bulkingCreating) et je ne peux pas le voir actuellement.
Association:Country.hasOne(Capital, { foreignKey: 'countryId' });
Remplir des données factices :
const countries = await Country.bulkCreate([
{ name: 'England' },
{ name: 'Spain' },
{ name: 'France' },
{ name: 'Canada' }
]);
const capitals = await Capital.bulkCreate([
{ name: 'London' },
{ name: 'Madrid'},
{ name: 'Paris' },
{ name: 'Ottawa' }
]);
countries.forEach((country, index) => {
country.setCapital(capitals[index]);
});
const country = await Country.findOne({where: {name: 'Spain'}});
console.log(country.name, Object.keys(country.__proto__)); // Spain / magic methods
const capital = await country.getCapital();
console.log(capital); // null
La table:

Ai-je tort de penser que je country.getCapital()devrais renvoyer l'entrée pertinente ?
Solution du problème
Comme vous pouvez le deviner setCapital, il devrait s'agir d'une fonction asynchrone car elle apporte des modifications à la base de données, vous devez donc utiliser à la forplace d' une forEachméthode qui ne prend pas en charge les rappels asynchrones :
let index = 0;
for (const country of countries) {
await country.setCapital(capitals[index]);
index += 1;
}
Il serait préférable de créer les pays un par un et de créer des capitales pour eux en ne s'appuyant pas sur les mêmes index des deux collections (la base de données peut renvoyer les enregistrements créés dans un ordre différent).
Aucun commentaire:
Enregistrer un commentaire