Bookshelf withRelated忽略foreignKey

时间:2016-09-24 02:03:30

标签: javascript sql node.js bookshelf.js knex.js

我尝试使用bookhelf通过名为account_id的列连接来返回相关的行。我以前把这一切都搞好了,因为它只是通过“id'列然后出于某种原因我们不得不将其改为不同的东西。

我的书架代码看起来像这样:

var Accounts = bookshelf.Model.extend({
  tableName: 'accounts',
  hasTimestamps: true,
  dailyTasks: function() {
    return this.hasMany(dailyTasks, 'account_id');
  }    
});

var dailyTasks = bookshelf.Model.extend({
  tableName: 'accounts_daily_tasks',
  hasTimestamps: true,
  account: function() {
    return this.belongsTo(Accounts, 'account_id')
  }
});

表架构如下所示:

帐户

|---------|----------------------------|
|    id   |  account_id (primary key)  |
|---------|----------------------------|
|    12   |       34                   |
|---------|----------------------------|

accounts_daily_tasks

|    id (primary key)   |  account_id   |
|-----------------------|---------------|
|    12                 |      34       |
|-----------------------|---------------|

哪些索引帐户表列account_id

当我运行以下内容时:

Accounts.where('user_id', user_id).fetchAll({
                          withRelated: ['dailyTasks']
                        })

我得到每天返回的空白。然而,在数据库中,它们都被吸引了。

当我调试时,我发现它正在调用它:

select `accounts_daily_tasks`.* from `accounts_daily_tasks` where `accounts_daily_tasks`.`account_id` in (1, 3, 4)' }

因此,它搜索in (1,3,4)的事实告诉我,它是通过名为id而不是account_id的列进行搜索。我觉得我已经尝试了所有的东西,但却无法让它发挥作用。

1 个答案:

答案 0 :(得分:0)

所以我设法解决了这个问题,我在帐户模型中缺少'idAttribute'。所以我把它改成了:

var Accounts = bookshelf.Model.extend({
  tableName: 'accounts',
  hasTimestamps: true,
  idAttribute: 'account_id',
  dailyTasks: function() {
    return this.hasMany(dailyTasks, 'account_id');
  }
});

嘿嘿,这一切都有效。