Node.js 在bookshelf.js中,我没有';我不理解如何从我的模板的hasOne()关系中的目标检索属性

Node.js 在bookshelf.js中,我没有';我不理解如何从我的模板的hasOne()关系中的目标检索属性,node.js,bookshelf.js,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',

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

您有点困惑,您需要将belong设置为钥匙所在的位置,将hasOne设置为钥匙所在的位置

例如,一篇文章有许多(但在概念上是相等的)评论,而一条评论属于一篇文章

在这个模型中,你只需要说出什么是关系,当你想重新获取它时(可能在控制器中),你需要做如下的事情

new Model({id:4})
  .fetchOne({withRelated: ['thing']})
  .then(function(model) {
       // retrive the relation
       var things = model.things(); // you already had the query done
  });

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

我似乎不理解这是如何异步工作的。您可能需要补充一点,这个问题与bookshelf.js的标题相关。。。这可能有助于让专家们阅读这篇文章。我就是这样得到它的。我的“多”模型属于“一”目标。我可以正确地查询和获取它,就像您在示例中所做的那样,但我不仅需要从“多”模型中传输字段,还需要从目标“一”模型中传输字段。因此,我的挑战是从模型和目标模型中获取字段,并将其放入一个对象中,我可以将其传递给我的EJS模板。我的关系很好,我可以获取目标模型。我的问题只是从then()返回值。根据我目前所知,.then()返回一个承诺,因此我需要知道如何从该承诺中获得价值。在你的例子中,我怎样才能从then()函数中返回东西呢?看看bookends插件,它可以让你更容易回答你不需要的问题,你从你的内部启动你的res.someting,现在我看到你在获取相关目标方面是对的。我不是在拉我以为是的那个。回到绘图板上。。。