Je reçois une colonne inconnue 'userDetails.createdAt' dans 'liste de champs' Lorsque j'essaie d'extraire avec 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 activé les horodatages dans Sequelize, mais vos définitions de table réelles dans la base de données ne contiennent pas de colonne d'horodatage.
Lorsque vous exécutez user.find, il ne fera que 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 associée à un alias, 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 consisterait à 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 tables ont des noms de colonne created_at, updated_at au lieu de createdat, updatedat. J'ai dû utiliser la correspondance de nom de champ 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,
},
..
..
..
..
J'ai eu la même erreur, deux solutions:
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'primary key',
`name` varchar(30) DEFAULT NULL COMMENT 'user name',
`created_at` datetime DEFAULT NULL COMMENT 'created time',
`updated_at` datetime DEFAULT NULL COMMENT 'updated time',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='user';
const Proje
ct = sequelize.define('project', {
title: Sequelize.STRING,
description: Sequelize.TEXT
},{
timestamps: false
})