1. ホーム
  2. node.js

[解決済み] findbyid "は関数ではないが、"findAll "は関数であるらしい。

2022-02-07 13:16:01

質問

findAll関数を呼び出すと正常に動作しますが(createとdestroyも同様)、findById関数を呼び出すと、 "findById is not a function" が投げられます( "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 v5では、findById()がfindByPk()に置き換わっています。findByIdをfindByPkに置き換えれば、すべてうまくいくはずです。クエリ ドキュメントを参照してください。 ここで