2016-06-14 4 views
0

Hallo allerseits ich bin fest auf ein Modell einer bestimmten Tabelle einer MySQL-Datenbank. Ich verwende 2 verschiedene Datenbanken in meiner SailsJS-Anwendung. Eine der beiden Datenbanken wurde vor der SailsJS-Anwendung erstellt, daher enthalten die Tabellen in dieser Datenbank nicht die Standardattribute, die in config/models.js konfiguriert sind. Das verursacht einen Fehler, wenn ich versuche, beispielsweise die Funktion find() für das Modell aufzurufen, das die ältere Datenbank verwendet, weil eine Spalte fehlt. Siehe folgende Fehlermeldung:Ignorieren Standardmodellattribute in SailsJS für 1 spezifisches Modell

: ER_BAD_FIELD_ERROR: Unknown column 'tbl_user.deleted' in 'field list'

Ich will nicht die Standardattribute zu den älteren Datenbankspalten hinzufügen, so ist es möglich, die Standardattribute in config/models.js für bestimmte Modelle konfigurieren zu ignorieren?

+0

Sehr interessante Anwendungsfall und ich kann sehen, dass dies auch während eines Migrationsprojekts recht gültig ist. Ich habe mir die vergangenen Projekte und die Dokumentation zur Wasserlinie angeschaut und bin ratlos. Das einzige, was mir einfällt, ist das Modellschema schemal zu starten: "schema: false", wie in der Dokumentation hier: https://github.com/balderdashy/waterline-docs/blob/master/models/configuration.md #schema – munkee

+0

@munkee Danke, dass Sie sich die Zeit genommen haben, einen Blick auf meine Frage zu werfen, aber leider hat es das Problem nicht gelöst. Ich habe gerade ein paar Dinge ausprobiert und eine Lösung gefunden. Siehe meine Antwort. – Jordi

Antwort

0

Nachdem ich ein paar Dinge ausprobiert hatte, kam ich auf die folgende Lösung. Fügen Sie dem Modell einfach die Standardattribute hinzu, fügen Sie es jedoch als Funktion hinzu.

module.exports = { 
connection: connection, 
migrate: 'safe', 
tableName: 'tbl_name', 
autoCreatedAt: false, 
autoUpdatedAt: false, 
autoPK: false, 
schema: true, 

attributes: { 
    id: { 
     columnName: 'id', 
     type: 'string', 
     primaryKey: true 
    }, 
    name: { 
     columnName: 'name', 
     type: 'string' 
    }, 
    email: { 
     columnName: 'email', 
     type: 'string' 
    }, 
    deleted: function(){ 
     var obj = this.toObject(); 
     delete obj.deleted; 
     return obj; 

    }, 

    createdBy: function(){ 
     var obj = this.toObject(); 
     delete obj.createdBy; 
     return obj; 

    } 
} 
}; 

In diesem Beispiel sind die Attribute löschen und createdBy sind Standardattribute in config/models.js. Ich habe eine Funktion dieser Attribute in dem spezifischen Modell gemacht. In dieser Funktion lösche ich dieses Attribut und gebe das Objekt ohne das gelöschte Attribut zurück.