Ich habe eine Express-App in Nodejs ausgeführt und verwendet Sequelize, um mit einer MySQL-Datenbank zu arbeiten. In meiner Db-Logik habe ich eine 1: n-Beziehung von ChatRoom
zu UserChatRoom
. Wenn ich versuche, eine Preform verbinden mit diesem Code:So führen Sie Sequelize Join
var userId = 1;
db.ChatRoom.findAll({ include: [{
model: db.UserChatRoom,
where: {
ucrIdChatUser:userId
},
required: false
}]})
ich die folgende Fehlermeldung auf der Konsole:
Unhandled rejection Error: UserChatRoom is not associated to ChatRoom!
at validateIncludedElement
Ich möchte die Abfrage Arbeits beitreten bekommen und Hilfe schätzen würde. Ich habe versucht, Verbände am Ende index.js
zu erzwingen. Dieses Skript lädt die Modelle in diesem Ordner, wenn die App gestartet wird und von der Sequlize-Website stammt.
Hinweis: UserChatRoom.ucrIdChatRoom
ist ein Fremdschlüssel zu UserChat.idChatRoom
Modelle:
module.exports = function(sequelize, DataType){
var ChatRoom = sequelize.define("ChatRoom",{
idChatUser: {
type: DataType.INTEGER,
autoIncrement: true,
primaryKey: true
},
crName: {
type: DataType.STRING,
allowNull: false
},
crDateInserted: {
type: DataType.DATE
},
crDateUpdated: {
type: DataType.DATE
},
crIsOpen: {
type: DataType.INTEGER,
defaultValue: 0
}
})
return ChatRoom;
}
und
module.exports = function(sequelize, DataType){
var UserChatRoom = sequelize.define("UserChatRoom",{
idUserChatUser: {
type: DataType.INTEGER,
autoIncrement: true,
primaryKey: true
},
ucrIdChatUser: {
type: DataType.INTEGER
},
ucrIdChatRoom: {
type: DataType.INTEGER
},
ucrDateInserted: {
type: DataType.DATE
},
ucrDateUpdated: {
type: DataType.DATE
}
})
return UserChatRoom;
}
index.js
:
"use strict";
var fs = require("fs");
var path = require("path");
var Sequelize = require("sequelize");
var env = process.env.NODE_ENV || "development";
var config = require(path.join(__dirname, '..', 'config', 'config.json'))[env];
if (process.env.DATABASE_URL) {
var sequelize = new Sequelize(process.env.DATABASE_URL,config);
} else {
var sequelize = new Sequelize(config.database, config.username, config.password, config);
}
var db = {};
fs
.readdirSync(__dirname)
.filter(function(file) {
return (file.indexOf(".") !== 0) && (file !== "index.js") && (file.slice(-3) === '.js');
})
.forEach(function(file) {
var model = sequelize.import(path.join(__dirname, file));
db[model.name] = model;
});
Object.keys(db).forEach(function(modelName) {
if ("associate" in db[modelName]) {
db[modelName].associate(db);
}
});
db.sequelize = sequelize;
db.Sequelize = Sequelize;
db.UserChatRoom.hasOne(db.ChatUser);
db.UserChatRoom.hasOne(db.ChatRoom, { foreignKey: 'ucrIdChatRoom' , foreignKeyConstraint:true });
db.ChatUser.belongsTo(db.UserChatRoom, { foreignKey: 'ucrIdChatRoom' , foreignKeyConstraint:true});
db.ChatRoomMessage.hasOne(db.UserChatRoom, { foreignKey: 'crmIdUserChatRoom' , foreignKeyConstraint:true });
module.exports = db;