2015-04-03 10 views
5

Ich habe ein Bookshelf.js-Modell. Ich möchte Attribute für dieses Modell festlegen und abrufen können, die in der Datenbank nicht persistent sind.Bookshelf.js Set-Attribut nicht in der Datenbank

Zum Beispiel kann sagen, dass ich ein Modell, das wie folgt aussieht:

var Domain = bookshelf.Model.extend({ 
     tableName: 'domains', 
     initialize: function() { 
     this.on('creating', this.setDomainName); 
     }, 
     setDomainName: function() { 
     this.set('name', getDomainFromUrl(this.url)); 
     } 
    }); 

Mit einem Schema, das wie folgt aussieht:

knex.schema.createTable('domains', function (table) { 
    table.increments().index(); 
    table.text('name').index(); 
    table.timestamps(); 
    }); 

Ich möchte in der Lage sein, ein Attribut zu speichern url genannt , dann parse die URL vor dem Speichern in eine Domäne.

Wenn ich versuche, so etwas wie diese:

new Domain({url: 'http://someurl.com/foo/bar'}).save() 

erhalte ich die Fehlermeldung:

"column \"url\" of relation \"domains\" does not exist" 

ich habe gesucht und gesucht. Ich kann keine Möglichkeit finden, einem bookshelf.js-Modell nicht persistente Attribute hinzuzufügen. Ich konnte auch nichts über das Hinzufügen von benutzerdefinierten Getter- und Setter-Methoden zu einem bookshelf.js-Modell finden.

Jede Hilfe oder Einsicht ist willkommen!

Antwort

6

Auf meinem Telefon, so verzeihen Sie die kurze Antwort, aber was Sie wollen, heißt "virtuelle" oder "Composite" -Felder.

https://github.com/tgriesser/bookshelf/wiki/Plugin:-Virtuals

Jeder Datenbank-Mapper hat sie, aber wenn Sie nicht wissen, was sie es verständlicherweise schwierig genannt werden, eine Lösung Google.

+1

OMG, danke! Das ist genau das, was ich brauche. Du hast recht, ich habe es vielleicht nie gefunden, ohne zu wissen, wie sie heißen. – nmajor

Verwandte Themen