我尝试使用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的列进行搜索。我觉得我已经尝试了所有的东西,但却无法让它发挥作用。
答案 0 :(得分:0)
所以我设法解决了这个问题,我在帐户模型中缺少'idAttribute'。所以我把它改成了:
var Accounts = bookshelf.Model.extend({
tableName: 'accounts',
hasTimestamps: true,
idAttribute: 'account_id',
dailyTasks: function() {
return this.hasMany(dailyTasks, 'account_id');
}
});
嘿嘿,这一切都有效。