2016-04-10 16 views
1

Stoklar ve anlık görüntüler için bu 1'den çoğa veri modeline sahibim.Kitaplık'ta modellerle birlikte modeller nasıl getirilir?

// stock.js 
var bookshelf = require('../config'); 
var Snapshot = require('./snapshot'); 

var Stock = bookshelf.Model.extend({ 
    tableName: 'stocks', 
    hasTimestamps: true, 

    snapshots: function() { 
    return this.hasMany(Snapshot); 
    } 
}); 
module.exports = bookshelf.model('Stock', Stock); 

Her stokta birçok veri anlık görüntüsü vardır. Böyle bir Stokta birden Snapshots almaya çalıştıklarında, Ancak

var bookshelf = require('../config'); 
var Stock = require('./stock'); 
var Snapshot = bookshelf.Model.extend({ 
    tableName: 'snapshots', 
    hasTimestamps: true, 

    stock: function() { 
    return this.belongsTo(Stock); 
    } 
}); 
module.exports = bookshelf.model('Snapshot', Snapshot); 

: Ben herhangi bir anlık görmüyorum

// report stock 
var bookshelf = require('./config'); 

var Stock = require('./models/stock'); 
var Snapshot = require('./models/snapshot'); 
var Promise = require("bluebird"); 

Stock.fetchAll({ 
    withRelated: ['snapshots'], 
    debug: true 
}) 
.then(function(collection) { 
    return collection.mapThen(function(model) { 
     return model.toJSON(); 
    }) 
}) 
.then(function(results) { 
    console.log(results); 
}) 
.finally(function(r) { 
    return bookshelf.knex.destroy(); 
}) 
.catch(function(e) { 
    console.log(e); 
}); 

: Bir anlık bir Stok belongsTo

{ method: 'select', 
    options: {}, 
    bindings: [], 
    sql: 'select "stocks".* from "stocks"' } 
{ method: 'select', 
    options: {}, 
    bindings: [ 1 ], 
    sql: 'select "snapshots".* from "snapshots" where "snapshots"."stock_id" in (?)' } 
[ { id: 1, 
    name: '...', 
    symbol: '...', 
    created_at: 1460285493918, 
    updated_at: 1460285493918, 
    snapshots: [] } ] 

Anlık görüntülerini ve join sorgularını görmeyi beklerdim. Ancak, anlık görüntü dizisi boş. Ne özledim

Teşekkürler!

cevap

3

bookshelf.plugin("registry") kullanıyorsanız, relations numaralı dizginizle bağlantı oluşturmanız gerekir.

var bookshelf = require('../config') 

var Stock = bookshelf.model('Stock', { 

    tableName: 'stocks', 

    hasTimestamps: true, 

    snapshots: function() { 

    return this.hasMany('Snapshot') 
    } 
}) 

var Snapshot = bookshelf.model('Snapshot', { 

    tableName: 'snapshots', 

    hasTimestamps: true, 

    stock: function() { 

    return this.belongsTo('Stock') 
    } 
}) 
+0

hmm .. Burada deneyin en azından kod örneğinde, dernek getirmesi değil gibi görünüyor: https://github.com/mulderp/stock_tracker – poseid

+1

'bookshelf.model' 3 argüman alır; "ModelName", "protoProps" ve "staticProps". Örneğiniz 'ModelName' ve' Model' kurucusunu geçiriyor. 'Model'inizi oluşturmak için' bookshelf.Model.extend' yerine, bookshelf.model'nin sizin için yapmasına izin verin. – thebearingedge

+0

teşekkürler! işe yarıyor! PR için de teşekkürler! – poseid

İlgili konular