Sequelize Неизвестный столбец '*.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)
});
Ответы
Ответ 1
Я думаю, что ошибка заключается в том, что у вас есть временные метки, включенные в sequelize, но ваши фактические определения таблиц в БД не содержат столбца временной метки.
Когда вы выполняете user.find, он просто выполняет 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
}
});
Ответ 2
Я получил ту же ошибку при переносе нашего проекта с Laravel на Fingerjs. Таблицы имеют имена столбцов create_at, updated_at вместо созданного, 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,
},
..
..
..
..
Ответ 3
Я получил ту же ошибку, два решения:
- когда создаете таблицу, добавьте столбцы create_at и updated_at.
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
})
Ответ 4
Отключить метки времени
Пример: -
const User = sequelize.define('user', {
firstName : Sequelize.STRING,
lastName : Sequelize.STRING,
}, {
timestamps: false
});