【问题标题】:Unknown column 'created_at' in 'field list“字段列表”中的未知列“created_at”
【发布时间】:2019-03-04 18:17:28
【问题描述】:

这是我的 customer_schema.js 文件:

up () {                                                                                                                                        
    this.create('customers', (table) => {                                                                                                        
      table.increments()                                                                                                                         
      table.string('name', 30)                                                                                                                   
    })                                                                                                                                           
  }

CustomerSeed.js:

class CustomerSeeder {                                                                                                                           
  async run () {                                                                                                                                 
    const customer = await Factory                                                                                                               
      .model('App/Models/Customer')                                                                                                          
      .create()                                                                                                                              
    console.log('customer: ')                                                                                                                    
  }                                                                                                                                              
}

Customer.js 模型是“空的”

我运行迁移,一切正常,但无法运行种子:adonis seed 抛出此错误消息:

code: 'ER_BAD_FIELD_ERROR',                                                                                                                    
  errno: 1054,                                                                                                                                   
  sqlMessage: "Unknown column 'created_at' in 'field list'",                                                                                     
  sqlState: '42S22',                                                                                                                             
  index: 0,                                                                                                                                      
  sql:                                                                                                                                           
   "insert into `customers` (`created_at`, `name`, `updated_at`) values ('2019-03-04 20:01:17', 'Peter Walsh', '2019-03-04 20:01:17')" }

为什么会这样?我什至没有在我的架构文件中声明 table.timestamps() 并且:


describe customers;                                                                                                                              
+-------+------------------+------+-----+---------+----------------+                                                                             
| Field | Type             | Null | Key | Default | Extra          |                                                                             
+-------+------------------+------+-----+---------+----------------+                                                                             
| id    | int(10) unsigned | NO   | PRI | NULL    | auto_increment |                                                                             
| name  | varchar(30)      | YES  |     | NULL    |                |                                                                             
+-------+------------------+------+-----+---------+----------------+                                                                             
2 rows in set (0.01 sec)

【问题讨论】:

    标签: javascript mysql node.js adonis.js


    【解决方案1】:

    编辑:

      static get createdAtColumn () {
        return null;
      }
    
      static get updatedAtColumn () {
        return null;
      }
    

    将这 2 个函数添加到您的模型中,它应该可以工作 :)

    【讨论】:

    • 我按照你的建议做了,但我遇到了问题。奇怪的是我的 MySQL 表根本没有这些列,因为我的模式文件没有声明它们。尽管努力 +1
    • 对不起,我没有在我的问题中提到它,但我使用 database/factory.js 来播种表格。谢谢
    • 我使用 MySQL 数据库
    • 你付出了很多努力,谢谢 :) 当你给我文档链接时,我尝试过这个解决方案
    • 我检查了你的代码和我的代码之间的区别:在我的updatedAtColumn() 中,我没有返回null,而是返回了.(一点),所以你的第一个解决方案是正确的。这是 Node.js 应用程序的一个干净的解决方案(从我读到的内容。你为此付出了很多努力,我尊重你。非常感谢。
    【解决方案2】:

    为了补充之前的好答案,当随着应用程序的增长您有很多模型时,您可以自动化上述解决方案,而不是根据模型编写它:

    'use strict'
    
    class NoTimestamp {
      register (Model) {
        Object.defineProperties(Model, {
          createdAtColumn: {
            get: () => null,
          },
          updatedAtColumn: {
            get: () => null,
          },
        })
      }
    }
    
    module.exports = NoTimestamp
    

    感谢 Romain Lanz,他向我展示了 this 解决方案。

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题(1054, "Unknown column 'created_at' in 'field list'")。 这个错误是因为我先迁移了我的表,然后在我的模型中添加了 created_at 列。我运行了 py manage.py makemigrations 命令,但没有运行 py manage.py migrate(实际数据库中不存在该列)。

      运行 py manage.py migrate 命令解决了这个问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-09
        • 2023-03-14
        • 2020-10-27
        • 2017-09-03
        • 2011-07-27
        相关资源
        最近更新 更多