J’obtiens une colonne Inconnu ‘userDetails.createdAt’ dans la liste des champs En essayant de récupérer avec l’association.
Utiliser findAll
sans association fonctionne bien.
Mon code est le suivant:
var userDetails = sequelize.define('userDetails', { userId :Sequelize.INTEGER, firstName : Sequelize.STRING, lastName : Sequelize.STRING, birthday : Sequelize.DATE }); var user = sequelize.define('user', { email: Sequelize.STRING, password: Sequelize.STRING }); user.hasOne(userDetails, {foreignKey: 'userId'}); user.findAll({include: [userDetails] }).success(function(user) { console.log(user) });
Je pense que l’erreur est que vous avez les horodatages activés dans la suite, mais vos définitions de table réelles dans la firebase database ne contiennent pas de colonne d’horodatage.
Lorsque vous faites user.find, il ne vous rest plus qu’à sélectionner l’ SELECT user.*
, Qui ne prend que les colonnes que vous avez réellement. Mais lorsque vous vous joignez, chaque colonne de la table jointe sera aliasée, ce qui crée la requête suivante:
SELECT `users`.*, `userDetails`.`userId` AS `userDetails.userId`,`userDetails`.`firstName` AS `userDetails.firstName`,`userDetails`.`lastName` AS `userDetails.lastName`, `userDetails`.`birthday` AS `userDetails.birthday`, `userDetails`.`id` AS `userDetails.id`, `userDetails`.`createdAt` AS `userDetails.createdAt`, `userDetails`.`updatedAt` AS `userDetails.updatedAt` FROM `users` LEFT OUTER JOIN `userDetails` AS `userDetails` ON `users`.`id` = `userDetails`.`userId`;
Le correctif serait de désactiver les horodatages pour le modèle userDetails:
var userDetails = sequelize.define('userDetails', { userId :Sequelize.INTEGER, firstName : Sequelize.STRING, lastName : Sequelize.STRING, birthday : Sequelize.DATE }, { timestamps: false });
ou pour tous les modèles:
var sequelize = new Sequelize('sequelize_test', 'root', null, { host: "127.0.0.1", dialect: 'mysql', define: { timestamps: false } });
J’ai eu la même erreur lors de la migration de notre projet de laravel à featherjs. Les tableaux ont des noms de colonnes created_at, updated_at au lieu de createdat, updatedat. J’ai dû utiliser le mappage de noms de champs dans les modèles Sequelize, comme indiqué ci-dessous
const users = sequelize.define('users', { id: { type: Sequelize.INTEGER, primaryKey: true }, createdAt: { field: 'created_at', type: Sequelize.DATE, }, updatedAt: { field: 'updated_at', type: Sequelize.DATE, }, .. .. .. ..