2015-04-03 18 views
5

Ho un modello Bookshelf.js. Voglio essere in grado di impostare e ottenere attributi per questo modello che non sono persistenti nel database.Attributo set Bookshelf.js non nella banca dati

Per esempio Diciamo che ho un modello che assomiglia a questo:

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

Con uno schema che assomiglia a questo:

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

Voglio essere in grado di salvare un attributo denominato url , quindi analizza l'url in un dominio prima di salvarlo.

quando provo qualcosa di simile:

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

ricevo il seguente messaggio di errore:

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

Ho guardato e guardato. Non riesco a trovare alcun modo per aggiungere attributi non persistenti a un modello bookshelf.js. Inoltre, non sono riuscito a trovare nulla sull'aggiunta di metodi getter e setter personalizzati a un modello bookshelf.js.

Qualsiasi aiuto o intuizione è apprezzato!

risposta

6

Sul mio telefono, perdonami la risposta breve, ma ciò che vuoi è chiamato "virtuale" o "composito".

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

Ogni banca dati mapper li ha, ma quando non si sa come si chiamano è comprensibilmente difficile da google una soluzione.

+1

OMG, grazie! Questo è esattamente ciò di cui ho bisogno. Hai ragione, potrei non averlo mai trovato senza sapere come sono chiamati. – nmajor