1
私はこの株式対スナップショットの1対多データモデルを持っています。Bookshelfで結合モデルを使用してモデルをフェッチする方法は?
// 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);
、私はこのような在庫から複数のスナップショットを取得しよう:
{ 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: [] } ]
:
// 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);
});
私は、任意のスナップショットが表示されませんスナップショットとjoin
というクエリが表示されます。ただし、スナップショット配列は空です。何が欠けていますか?
ありがとうございます!
うーん..私はここにしようと、少なくともコード例では、関連付けをフェッチていないようです:https://github.com/mulderp/stock_tracker – poseid
'bookshelf.model'は3つの引数を取ります。 'ModelName'、' protoProps'、 'staticProps'です。あなたの例は、 'ModelName'と' Model'コンストラクタを渡しています。 'bookshelf.Model.extend'を使って' Model'を作るのではなく、 'bookshelf.model'を使ってください。 – thebearingedge
ありがとう!できます! PRもありがとう! – poseid