Методы секвелирования ассоциаций не работают - PullRequest
1 голос
/ 20 сентября 2019

Я использую nodejs, пытаясь соединить две таблицы в базе данных, используя musql2 и секвенировать модуль npm.У меня есть две таблицы текста и категории.текст является потомком категории, когда я использую методы sequelize category.getText () возвращает ошибку "createtext не является функцией.

это модель текста

const Sequelize = require('sequelize)
const sequelize = require('../database/sequelize')

const Text = sequelize.define('Text', {
    id: {
        type: Sequelize.INTEGER,
        autoIncrement: true,
        allowNull: false,
        primaryKey: true,
    },
    anyText: {
        type: Sequelize.TEXT,
        allowNull: false,
    },
    state: {
        type: Sequelize.STRING,
        allowNull: false,
    },


})

module.exports = Text;

модель категории


const Sequelize = require('sequelize)

const sequelize = require('../database/sequelize')

const Category = sequelize.define('category', {
    id: {
        type: Sequelize.INTEGER,
        autoIncrement: true,
        allowNull: false,
        primaryKey: true,
    },
    category: {
        type: Sequelize.STRING,
        allowNull: false,
    },
})

module.exports = Category;

код, который я пытаюсь запустить

const sequelize = require('./database/sequelize')

const Text = require('./models/text')
const Category = require('./models/category')

Category.getTexts()
.then( text => {
   console.log(text)
})
.catch(err => {
   console.log(err)
})


Text.belongsTo(Category, { constraints: true, onDelete: 'CASCADE'});
Category.hasMany(Text),

//{ force: true}
sequelize
  .sync()
  // .sync({ force: true})
  .then(result => {
    console.log('connected');
  })
  .catch(err => {
    console.log(err);
  });

ошибка

Category.getTexts()
         ^

TypeError: Category.getTexts is not a function
    at Object.<anonymous> (C:\Users\karim\Desktop\ex\exp.js:6:10)
    at Module._compile (internal/modules/cjs/loader.js:776:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:829:12)
    at startup (internal/bootstrap/node.js:283:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3)

1 Ответ

0 голосов
/ 20 сентября 2019

Прежде всего вы должны изменить свою текстовую модель, например, это отношение надкатегории на стороне модели.

const Sequelize = require('sequelize)
const sequelize = require('../database/sequelize')
const Category = require('./category.model');

const Text = sequelize.define('Text', {
    id: {
        type: Sequelize.INTEGER,
        autoIncrement: true,
        allowNull: false,
        primaryKey: true,
    },
    anyText: {
        type: Sequelize.TEXT,
        allowNull: false,
    },
    state: {
        type: Sequelize.STRING,
        allowNull: false,
    },
})

Text.belongsTo(Category, { constraints: true, onDelete: 'CASCADE'});
Category.hasMany(Text),

module.exports = Text;

После этого вы должны изменить свой рабочий код с помощью этого.

const sequelize = require('./database/sequelize')

const Text = require('./models/text')
const Category = require('./models/category')

sequelize.sync().then(result => { 
    console.log('connected'); 
}).catch(err => {
    console.log(err); 
});

model.Category.findAll({
    where:{ your condition },
    include :[
        {
            model : model.Text,
            attributes : [ text field name], // If want to get all the field simple delete this line            
            required:true, // If you want to find all the category which has text then pass true else false
        },
    ]    
})
.then(PostData => {            
    if(PostData.count > 0){
        console.log("Post Data===>",PostData)
    }
    else{
        console.log("Post Data===> No record found")
    }
}).catch(err => {
    console.log("Post Data===> No record found")
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...