Как получить модель из sequenceize.model после использования sequenceize-cli

Я использую sequenceize-cli для автоматической генерации кода для модели Student:

module.exports = (sequelize, DataTypes) => {
  var _stu = sequelize.define('stu', {
    name: DataTypes.STRING,
    password: DataTypes.STRING,
    gender: DataTypes.INTEGER,
  }, {
    classMethods: {
      associate: function(models) {
        // associations can be defined here
      }
    }
  });
  return _stu
};

Мой вопрос

  1. Как получить модель с именем stu? Поскольку sequelize определено в сигнатуре функции.

Когда sequelize model:generate, последовательно читать конфиг в config.json, где указаны dbname,passowrd.

  1. Как sequelize в сигнатуре функции знает конфигурацию подключения к базе данных, скажем, имя, пароль и т. д., поскольку я не указываю в этом файле js.

person 吴环宇    schedule 30.12.2017    source источник


Ответы (3)


Ответ на вопрос 1: "sequelize.import" выполнит эту работу.

Попробуйте этот код:

const Sequelize = require('sequelize')
const sequelize = new Sequelize(...)

const stu = sequelize.import('./models/stu')

stu.findAll.then(...)
person tgarm    schedule 22.08.2019

Я заставляю это работать, импортируя модель с помощью функции require(), а затем вызывая ее с необходимыми параметрами.

Объяснение

По функции require вы получите другую функцию, которая возвращает вашу модель.

module.exports = (sequelize, DataTypes) => {
  const stu = sequelize.define('stu', {
    // ...database fields
  }, {});
  stu.associate = function(models) {
    // associations can be defined here
  };
  return sty;
} // note that module.exports is a function

Теперь для этой функции требуется инициализированный объект sequelize и DataTypes object, поэтому вам просто нужно передать экземпляр sequelize и Sequelize.DataTypes, и тогда она вернет вашу модель, например:

const Sequelize = require('sequelize');
const sequelize = new Sequelize(...);

const Stu = require('./models/stu')(sequelize, Sequelize.DataTypes);

Наконец, вы можете получить строки базы данных с помощью Stu.findAll().

Надеюсь, это поможет вам.

person lerichard_v    schedule 29.07.2019
comment
Как вы справляетесь с ассоциациями (ассоциировать) позже? - person Andrej Leitner; 08.10.2020

Когда вы создаете модели через интерфейс командной строки, он создает удобный файл models/index.js, который обрабатывает для вас передачу экземпляра Sequelize. Вы можете просто запросить выборку существующих моделей с помощью деструктуризации ES6 следующим образом:

var { stu } = require("./models");

stu.findAll().then(...);

В качестве альтернативы вы можете запросить их все сразу, а затем получить доступ к конкретным моделям по мере необходимости:

var models = require("./models");

models.stu.findAll().then(...);
person Joost Schuur    schedule 14.11.2019