2015-06-11 4 views
0

Я делаю простой хранилище сеансов от bookshelfjs, но мне нужно правильно установить столбец timestamp. Я пытаюсь написать ТТЛ столбец с компанией() + ТТЛ интервал 1мса, но я не могу вспомнить, как сделать это, или как вызвать сырец контента для этой колонки:Как написать это в Bookshelfjs и knex

var Session = Models.Bookshelf.Model.extend({ 
    tableName: 'sessions', 
    idAttribute: 'id' 
},{ 
    get: Promise.method(function(sid){ 
    console.log("Fetching SID = ", sid); 
    return new this({id: sid}).fetch(); 
    }), 
    set: Promise.method(function(sid, session, ttl){ 
    console.log("Setting SID = ", sid); 
    console.log("Setting SID session = ", session); 
    console.log("Setting SID ttl = ", ttl); 
    new this({id: sid}).save({session: session, expiry: "(now() + " + ttl + " * interval '1 ms')" }); 
    }), 
    destroy: Promise.method(function(sid){ 
    this.destroy({id: sid}); 
    }) 
}); 

Оригинальных Запрос из коа-пг-сессии является:

UPDATE %I.%I SET session = $1, expiry = (now() + $2 * interval '1 ms') WHERE id = $3; 

Я уверен, что это с сырым форматировщиком запроса Knex, но я не могу найти правильную часть в документации для установки значения столбца. Я не хочу писать полный запрос в строке, я хочу знать, как это сделать только для единственного столбца «expiry».

ответ

3

Я не проверял это, скажите мне, если он работает (вы должны требовать knex первый, конечно):

new this({id: sid}).save({session: session, expiry: knex.raw("(now() + " + ttl + " * interval '1 ms')") }); 
+0

То есть на самом деле, как я понял это прошлой ночью, и я приехал сюда опубликовать результат: новый ({id: sid}). save ({session: session, expiry: this.Bookshelf.knex.raw ("(now() +" + ttl + "* interval '1 ms «)")}); –