'필드 목록'의 알 수없는 열 '* .createdAt'을 Sequelize
연관으로 가져 오려고 할 때 '필드 목록'에 알 수없는 열 '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)
});
오류는 sequelize에서 타임 스탬프를 활성화했지만 DB의 실제 테이블 정의에 타임 스탬프 열이 포함되어 있지 않다는 것입니다.
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
}
});
프로젝트를 laravel에서 featherjs로 마이그레이션 할 때 동일한 오류가 발생했습니다. 테이블에는 createdat, updatedat 대신 created_at, updated_at 컬럼 이름이 있습니다. 아래에 주어진대로 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,
},
..
..
..
..
동일한 오류가 발생했습니다. 두 가지 해결책 :
- 테이블 생성시 created_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
})
타임 스탬프 비활성화 예 :-
const User = sequelize.define('user', {
firstName : Sequelize.STRING,
lastName : Sequelize.STRING,
}, {
timestamps: false
});
참고 URL : https://stackoverflow.com/questions/20386402/sequelize-unknown-column-createdat-in-field-list
'program story' 카테고리의 다른 글
읽기 전용 필드에 대해 불순한 메소드가 호출 됨 (0) | 2020.10.07 |
---|---|
페이지가 자바 스크립트 지원없이로드 될 때 텍스트 상자에 커서 (자동 초점)를 배치하는 방법은 무엇입니까? (0) | 2020.10.07 |
이름이 같은 두 개의 내 보낸 클래스 가져 오기 (0) | 2020.10.07 |
Eclipse에서 명령 줄 인수를 묻는 메시지를 표시하는 방법 (0) | 2020.10.07 |
XSD에서 elementFormDefault는 무엇을합니까? (0) | 2020.10.07 |