У меня есть эта модель данных «один ко многим» для акций и снимков.Как получить модели с объединенными моделями в Книжной полке?
// 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);
В каждом складе имеется много снимков данных. Снимок belongsTo на складе:
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);
Однако, когда я пытаюсь извлечь несколько снимков из запаса, как это:
// 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);
});
Я не вижу никаких снимков:
{ 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: [] } ]
Я ожидаю увидеть моментальные снимки и запрос join
. Однако массив снимков пуст. Что мне не хватает?
Спасибо!
хмм .. похоже, не для извлечения ассоциаций, по крайней мере, в этом примере кода я пытаюсь здесь: https://github.com/mulderp/stock_tracker – poseid
'bookshelf.model' принимает 3 аргумента; 'ModelName',' protoProps' и 'staticProps'. В вашем примере передается конструктор 'ModelName 'и' Model'. Вместо того, чтобы использовать 'bookshelf.Model.extend' для создания вашей модели, пусть' bookshelf.model' сделает это за вас. – thebearingedge
спасибо! оно работает! спасибо за PR тоже! – poseid