2014-03-03 20 views
4

使用bookshelfjs,我想將記錄添加到包含其他非空列的連接表中。使用UpdatePivot附加「Not Null」列

例如,用戶表和帳戶表具有accounts_users的連接表。

var Account = Bookshelf.Model.extend({ 
    tableName: 'accounts' 
}); 

var User = Bookshelf.Model.extend({ 

    tableName: 'users', 

    accounts: function() { 
    return this.belongsToMany(Account); 
    } 
}); 

連接表還有一個「order」列NOT NULL。

CREATE TABLE accounts_users 
(
    account_id integer NOT NULL, 
    user_id integer NOT NULL, 
    "order" integer NOT NULL, 
    CONSTRAINT accounts_users_account_id_foreign FOREIGN KEY (account_id) 
     REFERENCES accounts (id) MATCH SIMPLE 
     ON UPDATE CASCADE ON DELETE CASCADE, 
    CONSTRAINT accounts_users_user_id_foreign FOREIGN KEY (user_id) 
     REFERENCES users (id) MATCH SIMPLE 
     ON UPDATE CASCADE ON DELETE CASCADE 
) 

是否可以將用戶中的記錄附加到帳戶中的記錄中,並同時設置訂單值?

每一個可以單獨使用來完成:

user.related("accounts").attach(<USER_ID>); 

user.related("accounts").updatePivot({order: 1}); // with WHERE clause. 

單獨運行每個命令,因爲第一個將不能滿足NOT NULL限制將失敗。有沒有辦法使用書架一起執行兩個命令?使用Knex.Raw可以輕鬆完成,但如果可能的話,我希望使用書架來完成。

回答

7

您可以將名稱/值對傳遞給.attach以在連接表記錄上設置這些值。請參閱本GitHub的問題的第一部分的例子:

https://github.com/tgriesser/bookshelf/issues/134

user.related('accounts').attach({ account_id: 42, user_id: 84, order: 1})