Sequelize: необработанное отклонение. TypeError: admin.hasOperation_sav не является функцией - PullRequest
0 голосов
/ 27 февраля 2020

operation_sav модель определяется следующим образом:

operation_sav. js

module.exports = function(sequelize, DataTypes) {
  var operation_sav = sequelize.define(
    "operation_sav",
    {
      id: {
        type: DataTypes.INTEGER,
        primaryKey: true,
        allowNull: false,
        autoIncrement: true,
        unique: true
      },
      nom_operation: DataTypes.STRING,
      status: {
        type: DataTypes.ENUM(
          "en_cours_livraison",
          "en_reparation",
          "repare",
          "expedie"
        ),
        defaultValue: "en_cours_livraison"
      },
      num_serie: DataTypes.STRING,
      address_mac: DataTypes.STRING,
      sous_garantie: DataTypes.BOOLEAN,
      description: DataTypes.STRING,
      adminId: DataTypes.INTEGER,
      produitId: DataTypes.INTEGER,
      status: {
        type: DataTypes.ENUM(
          "produit_recu",
          "en_livraison",
          "en_reparation",
          "repare",
          "en_expedition",
          "expedie",
          "annule"
        ),
        defaultValue: "produit_recu"
      }
    },
    { timestamps: true }
  );

  return operation_sav;
};

Обратите внимание, что существует внешняя внешняя ключ adminId Взаимосвязь между таблицей Admin и таблицей Operation_sav определяется следующим образом:

  /** admin Has Many operation_sav*/
  model.operation_sav.belongsTo(model.admin, {
    foreignKeyConstraint: true,
    onDelete: "cascade"
  });

  model.admin.hasMany(model.operation_sav, {
    foreignKeyConstraint: true,
    onDelete: "cascade"
  });

Это функция, которая создает строку в таблице Operation_sav :

var createSavOperation = function(operationInformation) {
  return models.operation_sav.create(operationInformation);
};

Я использовал ее для создания этой строки:

{
    "id": 4,
    "nom_operation": "Répartion viwone plus",
    "status": "produit_recu",
    "num_serie": "5525ggffdd",
    "address_mac": "ff:ff:ff:ff:ff",
    "sous_garantie": true,
    "description": "Panne bouton droit",
    "adminId": 10,
    "produitId": 6,
    "updatedAt": "2020-02-27T09:22:47.430Z",
    "createdAt": "2020-02-27T09:22:47.430Z"
}

Обратите внимание, что adminId равен 10 и operation_savId равен 4 . Поэтому я пытаюсь проверить, сработала ли вся ассоциация, запустив этот код:

  models.operation_sav.findByPk(4).then(operation_sav => {
    admin = models.admin.findByPk(10);
    admin.hasOperation_sav(operation_sav);
  });

Однако я получаю эту ошибку:

Необработанное отклонение TypeError: admin.hasOperation_sav is не функция

Это потому, что я вручную написал значение adminId при создании этой строки operation_sav ?

РЕДАКТИРОВАТЬ 1: Когда я добавил эту строку console.log:

  admin = models.admin.findByPk(10);
    console.log(admin instanceof models.admin); // false!!
    admin.hasoperation_sav(operation_sav);

Я получил false , что не имеет никакого смысла, но это своего рода объясняет, почему sequelize не генерирует admin.hasoperation_sav не является функцией ошибка ..
РЕДАКТИРОВАТЬ 2: Я исправил РЕДАКТИРОВАТЬ 1 , как это :

 models.admin.findByPk(10).then(adminFound => {
      console.log(
        "admin is instance of models.admin",
        adminFound instanceof models.admin
      ); // true
      adminFound.hasoperation_sav(operation_sav);
    });

Но, hasoperation_sav по-прежнему не распознается как функция.

1 Ответ

0 голосов
/ 27 февраля 2020

Я решил это так:

  models.operation_sav.findByPk(4).then(operation_sav => {
    models.admin.findByPk(10).then(adminFound => {
      console.log(
        "admin is instance of models.admin",
        adminFound instanceof models.admin
      );
      // admin is instance of models.admin true
      adminFound.hasOperation_sav(operation_sav).then(result => {
        console.log("admin has operation sav", result);
        //admin has operation sav true
      });
    });
  });
...