2017-03-12 1 views
0

Ich habe 4 Tabellen/Modelle, die ids als Primärschlüssel, aber für das Beispiel teilen zeige ich nur 2Wie auf gemeinsame ids Tabellen auf sequelize abfragen

User: { 
    id: { 
     type: Sequelize.INTEGER, 
     primaryKey: true, 
     allowNull: false 
    } 
Person: { 
    id: { 
     type: Sequelize.INTEGER, 
     primaryKey: true, 
     allowNull: false 
    }, 
    name: { 
     type: Sequelize.STRING 
    } 

Ich teilte ids verwenden, so die Person, Primärschlüssel ist der Primärschlüssel des Benutzers, es hat keine automatische Verkleinerung. Gibt es eine Möglichkeit, eine Verbindung zwischen diesen beiden Tabellen herzustellen? Ich habe versucht, etwas wie zu tun:

getAll(){ 
    return User.getAll({ 
     include: [{ 
      model:Person, 
     }] 
    }) 
} 

Aber da es keine Beziehung gibt es nicht funktioniert. Was soll ich machen? Dank

Antwort

0

Sie können nicht einschließen, ohne eine Beziehung. Sie könnten eine rohe Abfrage verwenden die Informationen, wie abzurufen:

var queryString = 'select * from User u join Person p on u.id = p.id where u.id = :sharedId'; 

models.sequelize 
    .query(queryString, { 
     replacements: { shareId: id}, 
     type: models.sequelize.QueryTypes.SELECT 
    }) 
    .then(function(result) { 
     res.json(attendance); 
    }); 

Aber dann würden Sie Validierungen implementieren müssen, um zu machen sind sicher, dass Tabellen Correclty gefüllt.

Allerdings würde ich Sie ermutigen, Beziehungen zwischen Ihren Tabellen zu implementieren, da es wartungsfreundlicher wäre. Etwas wie dieses:

var User = sequelize.define("User", { 
    id: { type: DataTypes.INTEGER, primaryKey: true}, 
    name: { type: DataTypes.STRING, name: 'name' }, 
    ... 
}, { 
    classMethods: { 
    associate: function(models) { 
     User.hasOne(models.Person); 
    } 
    } 
}); 

var Person = sequelize.define("Person", { 
    id: { type: DataTypes.INTEGER, primaryKey: true}, 
    name: { type: DataTypes.STRING, name: 'name' }, 
    ... 
}, { 
    classMethods: { 
    associate: function(models) { 
     Person.belogsTo(models.User); 
    } 
    } 
}); 
Verwandte Themen