sequelize Unknown 열 '*.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)
});
오류는 sequelize에서 타임스탬프가 활성화되어 있지만 DB의 실제 테이블 정의에 타임스탬프 열이 포함되어 있지 않다는 것입니다.
사용할 때.그것으로 충분하다는 것을 깨닫습니다.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에서 federjs로 마이그레이션할 때도 같은 오류가 발생했습니다.테이블에 생성된 열 이름 대신 생성된 열 이름, 업데이트된 열 이름, 업데이트된 열 이름이 있습니다.아래와 같이 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 및 update_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 Project = sequelize.define('project', {
title: Sequelize.STRING,
description: Sequelize.TEXT
},{
timestamps: false
})
일반적인 구성에서는 다음과 같은 도움이 되었습니다.
{
timestamps: true,
}
끝나고
{
timestamps: true,
underscored: true,
}
postgresql의 경우:
const sequelize = new Sequelize('postgres://user:pass@url:port/dbname',{
define:{
timestamps: false
}
})
말할 것도 없이 교체user
,pass
,url
,port
그리고.dbname
구성 값을 입력합니다.
타임스탬프 사용 안 함 Ex:-
const User = sequelize.define('user', {
firstName : Sequelize.STRING,
lastName : Sequelize.STRING,
}, {
timestamps: false
});
음, 너무 늦었을 수도 있지만, 마이그레이션할 때 createdAt, updateAt를 생성할 수 있습니다.
createdAt: {
allowNull: false,
defaultValue: Sequelize.fn('now'),
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
defaultValue: Sequelize.fn('now'),
type: Sequelize.DATE
}
express와 sequelize mysql을 사용하고 모델은 ex에 대해 보통처럼 정의합니다.
module.exports = (sequelize, DataTypes) => {
const Customer = sequelize.define('customer', {
name: DataTypes.STRING,
email: DataTypes.STRING,
phone: DataTypes.TEXT,
consider: DataTypes.TEXT,
otherQuestion: DataTypes.TEXT
}, {})
return Customer
언급URL : https://stackoverflow.com/questions/20386402/sequelize-unknown-column-createdat-in-field-list
'sourcecode' 카테고리의 다른 글
Swift 4에서 Json 문자열을 Json 개체로 변환 (0) | 2023.10.31 |
---|---|
std::string의 컨텍스트에서 약자 SSO의 의미 (0) | 2023.10.31 |
문자열에서 새 줄(\n)을 사용하고 HTML에서 동일하게 렌더링 (0) | 2023.10.31 |
자바스크립트:변수에 할당된 콜백 함수에 변수를 전달할 수 있습니까? (0) | 2023.10.31 |
배열 값별 MySQL 정렬 순서 (0) | 2023.10.31 |