2015-04-03 13 views
5

Mam model Bookshelf.js. Chcę móc ustawić i uzyskać atrybuty dla tego modelu, które nie są trwałe w bazie danych.Zestaw atrybutów bookshelf.js nie znajduje się w bazie danych

Na przykład powiedzmy, że mam model, który wygląda tak:

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

ze schematem, który wygląda tak:

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

Chcę być w stanie zaoszczędzić atrybut o nazwie url , a następnie przeanalizować URL w domenie, zanim ją zapisa.

Kiedy próbuję coś takiego:

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

otrzymuję komunikat o błędzie:

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

szukałem i spojrzał. Nie mogę znaleźć żadnego sposobu dodania nietrwałych atrybutów do modelu bookshelf.js. Nie mogłem też znaleźć niczego na temat dodawania niestandardowych metod pobierania i ustawiania do modelu bookshelf.js.

Każda pomoc lub wgląd jest mile widziany!

Odpowiedz

6

Na moim telefonie, wybacz krótką odpowiedź, ale to, co chcesz, nazywa się polami "wirtualnymi" lub "złożonymi".

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

Każdy odwzorowujący baza danych ma je, ale kiedy nie wiem, co nazywa się to ze zrozumiałych względów trudno google rozwiązanie.

+1

OMG, dziękuję! Dokładnie tego potrzebuję. Masz rację, może nigdy nie znalazłem tego, nie wiedząc, jak się nazywają. – nmajor

Powiązane problemy