在bookshelf.js中,我不了解如何从我的模板的hasOne()关系中的目标中检索属性

时间:2015-07-27 21:05:25

标签: node.js bookshelf.js

我有一个任务对象,属于一个工作对象。这是一个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设置。

1 个答案:

答案 0 :(得分:2)

你有点困惑,你需要拥有你拥有密钥的belongsTo和基本上指向的hasOne。

例如,帖子有很多(但概念上相同)评论,评论属于帖子。

在模型中你只需要说出什么样的关系,当你想要回溯它时(可能在控制器中)你需要做这样的事情

iso.h

您需要详细说明这一点,但考虑到概念,文档有很多帮助