Considerare i seguenti modelli:Query tabella di collegamento senza ottenere entrambe le associazioni in Sequelize
var User = sequelize.define('User', {
_id:{
type: Datatypes.INTEGER,
allowNull: false,
primaryKey: true,
autoIncrement: true
},
name: Datatypes.STRING,
email:{
type: Datatypes.STRING,
unique: {
msg: 'Email Taken'
},
validate: {
isEmail: true
}
}
});
var Location= sequelize.define('Location', {
_id:{
type: Datatypes.INTEGER,
allowNull: false,
primaryKey: true,
autoIncrement: true
},
name: Datatypes.STRING,
address: type: Datatypes.STRING
});
Location.belongsToMany(User, {through: 'UserLocation'});
User.belongsToMany(Location, {through: 'UserLocation'});
C'è un modo per interrogare la tabella di UserLocation
per una specifica UserId
e ottenere il corrispondente Locations
. Qualcosa di simile:
SELECT * FROM Locations AS l INNER JOIN UserLocation AS ul ON ul.LocationId = l._id WHERE ul.UserId = 8
Da quello che riesco a trovare che si può fare qualcosa di simile a:
Location.findAll({
include: [{
model: User,
where: {
_id: req.user._id
}
}]
}).then(loc => {
console.log(loc);
});
Tuttavia, questo restituisce il Locations
, UserLocation
giunzioni, e User
cui si unisce la tavola User
quando non ho bisogno di alcuna informazione utente e ho solo bisogno dello Locations
per quell'utente. Quello che ho fatto funziona, tuttavia, la query rispetto alla tabella di giunzione è preferibile al posto della ricerca sulla tabella User
.
Spero che questo sia chiaro. Grazie in anticipo.
Modifica
realtà ho finito per l'attuazione del presente in un modo diverso. Tuttavia, lo farò ancora come una domanda, perché dovrebbe essere possibile.
Potreste fornire il modo in cui usereste la tabella 'UserLocation' per produrre esattamente la query che l'OP sta chiedendo? Grazie. – alecxe
Non ho potuto provarlo ora perché non ho live sequelize project qui. Ma sono abbastanza sicuro che è possibile utilizzare la tabella di giunzione come qualsiasi altra tabella senza danneggiare la definizione delle relazioni. Nel peggiore dei casi è possibile dichiarare esplicitamente colonne di chiavi esterne su UserLocation, ma suppongo che siano definite su classi sequenziate. (Simile alla colonna id, dichiarata automaticamente, ma se la si ripete esplicitamente nothihng accade) E dopo ciò si dovrebbe usare UserLocation come chiave esterna di base e costruire la query nello stesso modo. – farincz
Ciò non consente ancora di unirsi a una delle entità di associazione con la tabella di giunzione senza l'altra entità di associazione. – jony89