在使用 Sequelize 进行数据查询时,经常会遇到 "Unknown column" 错误。这种错误通常是由于模型的属性名称与数据库表中的列名不一致引起的。本文将介绍如何解决这种错误,并提供示例代码帮助读者更好地理解。
错误原因
在使用 Sequelize 进行数据查询时,通常会使用模型中的属性名称进行查询。例如:
// javascriptcn.com 代码示例 const User = sequelize.define('user', { firstName: { type: Sequelize.STRING, allowNull: false }, lastName: { type: Sequelize.STRING, allowNull: false } }); User.findAll({where: {firstName: 'John'}});
上述代码中,我们使用了 User.findAll
方法查询了所有 firstName
为 'John' 的用户。然而,如果数据库表中的列名与模型中的属性名称不一致,就会导致 "Unknown column" 错误。例如,如果数据库表中的列名为 first_name
,那么上述代码将会失败并抛出 "Unknown column 'firstName' in 'where clause'" 错误。
解决方案
为了解决这个问题,我们需要在模型中指定每个属性对应的列名。这可以通过在属性定义中添加 field
属性来实现。例如:
// javascriptcn.com 代码示例 const User = sequelize.define('user', { firstName: { type: Sequelize.STRING, allowNull: false, field: 'first_name' }, lastName: { type: Sequelize.STRING, allowNull: false, field: 'last_name' } }); User.findAll({where: {firstName: 'John'}});
上述代码中,我们通过在属性定义中添加 field
属性,指定了 firstName
属性对应的列名为 first_name
。这样,查询时就会使用正确的列名,避免了 "Unknown column" 错误的发生。
示例代码
下面是一个完整的示例代码,演示了如何使用 Sequelize 进行查询时避免 "Unknown column" 错误的发生。
// javascriptcn.com 代码示例 const Sequelize = require('sequelize'); const sequelize = new Sequelize('database', 'username', 'password', { host: 'localhost', dialect: 'mysql' }); const User = sequelize.define('user', { firstName: { type: Sequelize.STRING, allowNull: false, field: 'first_name' }, lastName: { type: Sequelize.STRING, allowNull: false, field: 'last_name' } }); sequelize.sync() .then(() => User.create({ firstName: 'John', lastName: 'Doe' })) .then(() => User.findAll({where: {firstName: 'John'}})) .then(users => { console.log(users); }) .catch(error => { console.error(error); });
上述代码中,我们首先定义了一个 user
模型,并在其中指定了每个属性对应的列名。然后,我们使用 sequelize.sync
方法同步模型与数据库表,并在数据库中创建一条用户记录。最后,我们使用 User.findAll
方法查询所有 firstName
为 'John' 的用户,并将结果输出到控制台。
总结
本文介绍了 Sequelize 查询时出现 "Unknown column" 错误的解决方案,并提供了示例代码帮助读者更好地理解。在使用 Sequelize 进行数据查询时,一定要注意模型属性名称与数据库表列名的对应关系,以避免类似的错误发生。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65576de6d2f5e1655d1d493b