2016-09-24 8 views
0

bookshelfを使用して関連する行を返すと、account_idという列で接続されています。私はこれまで「id」列でリンクされていたが、ある理由か別の理由でそれを別のものに変更しなければならなかったときに、以前はこのすべてが正常に機能していました。Bookshelf with foreignKeyを無視して

マイ本棚のコードは次のようなものになります。

accounts_daily_tasks

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

アカウント:そうは次のようにテーブルスキーマが見え

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 (primary key) | account_id | 
|-----------------------|---------------| 
| 12     |  34  | 
|-----------------------|---------------| 

をACCOUNT_IDそして、私が実行すると、以下:

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

は私が得るdailyTasksが空として返されます。しかし、データベースではそれはすべて繋がっています。

私はそれがこれを呼び出している参照デバッグ:

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

だから、in (1,3,4)を検索するという事実は、それがむしろACCOUNT_IDより列と呼ばれるIDで検索されたと言われます。私はすべてを試したような気がしますが、これを動作させることはできません。

+0

2つのテーブルのスキーマは何ですか? – dmlittle

+0

投稿を編集し、基本的なテーブルのスキーマを追加しました –

答えて

0

私はこれを理解することができたので、私はアカウントモデルで 'idAttribute'が不足していました。そこで、私はそれを次のように変更しました:

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

そして、それはすべて元気でした。

関連する問題