我有一个任务对象,属于一个工作对象。这是一个belongsTo()关系,但我使用的是hasOne()关系,因为我无法弄清楚belongsTo()。
我的模特是:
var job = Bookshelf.Model.extend({
tableName: 'jobs',
idAttribute: 'id'
});
var task = Bookshelf.Model.extend({
tableName: 'tasks',
idAttribute: 'id',
job: function() {
return this.hasOne(Job);
},
job_summary: function() {
return this.job().fetch().get('summary');
}
});
我已尝试过.job_summary()函数的一些组合,但似乎没有任何效果。当我创建一个任务对象时,我只想获得相关任务的工作总结,如:
var task_jobsummary = task.job_summary();
我错过了什么?
编辑:我实际上有2个hasOne()目标,我需要获取数据。
编辑:我认为我的问题不是理解承诺。如果我在PHP中这样做,我会做类似的事情:$myvar = stdClass();
$myvar->somefield = $task->getSomefield();
$myvar->anotherfield = $task->getAnotherField();
$myvar->jobfield = $job->getSomeJobField();
// ... etc
我想在fetch()之后简单地从then()返回值。
编辑:这是我的路由器代码:
var route_task(req, res, next) {
res.locals.username = 'debug_username';
res.locals.userpic = '/img/tmpuserpic.png';
new Model.Task().fetch({id: req.params.id, withRelated: ['job']})
.then(function(task) {
task.related('job').fetch().then(function(job) {
res.locals.somefield = job.get('somefield');
});
})
.then(function() {
res.render('task');
})
}
设置模型之前的两个变量,我的模板会看到它们。但是,模板没有看到res.locals.somefield设置。
答案 0 :(得分:2)
你有点困惑,你需要拥有你拥有密钥的belongsTo和基本上指向的hasOne。
例如,帖子有很多(但概念上相同)评论,评论属于帖子。
在模型中你只需要说出什么样的关系,当你想要回溯它时(可能在控制器中)你需要做这样的事情
iso.h
您需要详细说明这一点,但考虑到概念,文档有很多帮助