【问题标题】:Sequelize association include returns nullSequelize 关联包括返回 null
【发布时间】:2017-03-30 16:43:47
【问题描述】:

我在尝试使用 sequelize-cli 将表关联到我的查询时遇到问题。

我的查询有效,但没有填充 Adresse 表。只有患者被填充。地址数组被忽略。 (返回空)

我在表之间建立了一对一的关系,但不确定这是错误的原因还是我在其他地方关联了这两个表。

这是我的模型:

server/models/patient.js

module.exports = (sequelize, Sequelize) => {
    const Patient = sequelize.define('Patient', {
        ///
    }, {
        classMethods: {
            associate: (models) => {
                Patient.belongsTo(models.Adresse, {
                    foreignKey: 'adresseId',
                });
            }
        }
    });
    return Patient;
};

server/models/adresse.js

module.exports = function(sequelize, Sequelize) {
    const Adresse = sequelize.define('Adresse', {
        adresse: {
            type: Sequelize.STRING,
            allowNull: false,
        },
        complementAdr: {
            type: Sequelize.STRING
        },
        codePostal: {
            type: Sequelize.INTEGER,
            allowNull: false
        },
    }, {
        classMethods: {
            associate: (models) => {
                Adresse.hasMany(models.Patient, {
                    foreignKey: 'adresseId',
                    as: 'Patients',
                });
            }
        }
    });
    return Adresse;
};

这是我在迁移文件中指定关联的地方:

server/migrations/20170326145609-create-patient.js

adresseId: {
    type: Sequelize.INTEGER,
    references: {
        model: 'Adresses',
        key: 'id_adresse',
        as: 'adresseId',
    },
},

server/migrations/20170326145502-create-adresse.js

module.exports = {
    up: (queryInterface, Sequelize) => {
        return queryInterface.createTable('Adresses', {
            id_adresse: {
                allowNull: false,
                autoIncrement: true,
                primaryKey: true,
                type: Sequelize.INTEGER
            },
            adresse: {
                type: Sequelize.STRING,
                allowNull: false,
            },
            complementAdr: {
                type: Sequelize.STRING
            },
            codePostal: {
                type: Sequelize.INTEGER,
                allowNull: false
            },
            createdAt: {
                allowNull: false,
                type: Sequelize.DATE
            },
            updatedAt: {
                allowNull: false,
                type: Sequelize.DATE
            }
        });
    },
    down: function(queryInterface, Sequelize) {
        return queryInterface.dropTable('Adresses');
    }
};

最后是我对控制器文件的查询:

服务器/控制器/患者.js

const express = require('express');
const router = express.Router();
const jwt = require('jsonwebtoken');
const Patient = require('../models').Patient;
const Adresse = require('../models').Adresse;

module.exports = {
    create(req, res) {
        return Patient
            .create({
                ///
                adressesId: {
                    adresse: req.body.adresse,
                    codePostal: req.body.codePostal,
                }
            }, {
                include: [{
                    model : Adresse
                }]
            })
            .then(patient => res.status(201).send(patient))
            .catch(error => res.status(400).send(error));
    }
};

【问题讨论】:

    标签: javascript sql sequelize.js es6-modules


    【解决方案1】:

    在急切地创建与给定Patient 相关的Adresse 模型实例时尝试使用Adresse 而不是adresseId

    return Patient.create({
        // patient attributes,
        Adresse: {
            adresse: req.body.adresse,
            codePostal: req.body.codePostal
        },
        include: [ Adresse ]
    }).then(patient => {
        // look at the query generated by this function
        // it should create both patient and adresse
    });
    

    【讨论】:

      猜你喜欢
      • 2015-07-27
      • 1970-01-01
      • 2020-12-22
      • 1970-01-01
      • 1970-01-01
      • 2022-06-13
      • 1970-01-01
      • 2018-05-15
      • 2015-04-26
      相关资源
      最近更新 更多