续集“findbyid”不是一个函数,但显然“findAll”是

Posted

技术标签:

【中文标题】续集“findbyid”不是一个函数,但显然“findAll”是【英文标题】:sequelize "findbyid" is not a function but apparently "findAll" is 【发布时间】:2017-05-25 11:02:33 【问题描述】:

我在使用 sequelize 时遇到了一个非常奇怪的问题,当我尝试调用函数 findAll 时它工作正常(创建和销毁相同),但是当我尝试调用函数“findById”时,它会抛出“findById is not a函数”(与“FindOne”相同)。

//works fine
var gammes = models.gamme.findAll().then(function(gammes) 
        res.render('admin/gammes/gestion_gamme',
            layout: 'admin/layouts/structure' ,
            gammes : gammes,
            js: "gammes"
        );
    );

// throws models.gamme.findById is not a function
models.gamme.findById(req.params.id).then(function(gamme) 
        gamme.update(
            nom: req.body.nom
        ).then(function () 
            res.redirect("/gammes");
        )
    );

Gamme.js 模型

module.exports = function (sequelize, DataTypes) 
    "use strict";
    var gamme = sequelize.define('gamme', 
        id_gamme: 
            type: DataTypes.INTEGER.UNSIGNED,
            autoIncrement: true,
            primaryKey: true
        ,
        nom: 
            type: DataTypes.STRING,
            allowNull: false
        
    , 
        classMethods: ,
        timestamps: false
    );
    return gamme;
;

【问题讨论】:

你能告诉我们你使用的sequelize版本吗 github.com/sequelize/sequelize/wiki/Upgrade-from-2.0-to-3.0 非常感谢!我在查阅sequelize 2的文档,但是安装的版本是1.7 【参考方案1】:

在 Sequelize v5 中,findById() 被 findByPk() 取代。使用 findByPk 替换 findById,一切正常。您可以找到查询文档here

【讨论】:

是什么让您相信 OP 使用的是 v5?你看到关于安装版本是 v1.7 的评论了吗? 我刚刚从 Sequelize 4.33.2 升级到 5.8.6,这解决了我的问题。 我尝试在 sequelize 6.13.0 版本中,findByPk() 可以正常工作【参考方案2】:

直接传值。

Question.findByPk(question_id).then(question => 
            return res.status(200).json(
                question: question
           );
).catch(err => 
     console.log(err);
);

【讨论】:

【参考方案3】:

sequelize 团队正在删除这个函数并用一个新函数替换它

findByPk

喜欢这个

// search for known ids
Project.findByPk(123).then(project => 
  // project will be an instance of Project and stores the content of the table entry
  // with id 123. if such an entry is not defined you will get null
)

【讨论】:

以上是关于续集“findbyid”不是一个函数,但显然“findAll”是的主要内容,如果未能解决你的问题,请参考以下文章

findById 返回文档列表而不是单个结果

[ES6深度解析]10:Generators 续集

在hasmany的续集中与计数

Sequelize db.define 是否一个函数?

flutter 中的列表的性能优化续集#yyds干货盘点#

如何在 Spring data jpa 中正确使用 findBySomeOtherId 而不是 findById?