首页 文章

'field list'中的Sequelize Unknown列'*.createdAt'

提问于
浏览
67

我在'字段列表'中收到一个未知列'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)
});

3 回答

  • 0

    我认为错误是你在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
        }
    });
    
  • 1

    将项目从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,
         },
         ..
         ..
         ..
         ..
    
  • 140

    我有同样的错误,两个解决方案:

    创建表时

    • ,添加created_at和updated_at列 .

    CREATE TABLEusers(idint(11) NOT NULL AUTO_INCREMENT COMMENT 'primary key',namevarchar(30) DEFAULT NULL COMMENT 'user name',created_atdatetime DEFAULT NULL COMMENT 'created time',updated_atdatetime 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
    })
    

相关问题