Sequelize关联包括返回null

时间:2017-03-29 21:52:25

标签: javascript sql sequelize.js es6-modules

当我尝试将表格与sequ​​elize-cli关联到我的查询时,我遇到了问题。

我的查询有效,但不会填充Adresse表。仅填充患者。 Adresse数组被忽略。 (返回null)

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

这是我的模特:

服务器/模型/ patient.js

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

服务器/模型/ 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;
};

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

服务器/迁移/ 20170326145609创建-patient.js

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

服务器/迁移/ 20170326145502创建-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');
    }
};

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

服务器/控制器/ patients.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));
    }
};

1 个答案:

答案 0 :(得分:1)

在急切创建与给定Adresse

相关的adresseId模型实例时,请尝试使用Adresse代替Patient
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
});