Секвенировать неизвестный столбец'*.createdAt' в 'список полей'
Я получаю неизвестный столбец 'userDetails.createdAt' в 'список полей' При попытке выборки с Ассоциацией.
используя findAll
без Ассоциации работает нормально.
мой код выглядит следующим образом:
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)
});
2 ответа:
Я думаю, что ошибка заключается в том, что у вас есть временные метки, включенные в sequelize, но ваши фактические определения таблиц в БД не содержат столбца временных меток.
когда вы делаете пользователей.найти его будет просто сделать
SELECT user.*
, который принимает только столбцы, которые у вас есть на самом деле. Но при объединении каждый столбец объединенной таблицы будет иметь псевдоним, что создает следующий запрос: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`;
исправление будет заключаться в отключении меток времени для любого userDetails модель:
var userDetails = sequelize.define('userDetails', { userId :Sequelize.INTEGER, firstName : Sequelize.STRING, lastName : Sequelize.STRING, birthday : Sequelize.DATE }, { timestamps: false });
или для всех моделей:
var sequelize = new Sequelize('sequelize_test', 'root', null, { host: "127.0.0.1", dialect: 'mysql', define: { timestamps: false } });
Я получил ту же ошибку при переносе нашего проекта из laravel в featherjs. Таблицы имеют имена столбцов created_at, updated_at вместо createdat, updatedat. Мне пришлось использовать сопоставление имен полей в моделях Sequelize, как показано ниже
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, }, .. .. .. ..