使用bookshelfjs,我想将记录添加到包含附加列,而不是可空列的连接表中。
例如,用户表和帐户表将具有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轻松完成,但我想尽可能使用书架。
答案 0 :(得分:7)
您可以将名称/值对传递到.attach,以便在连接表记录中设置这些值。请参阅此GitHub问题第一部分中的示例:
https://github.com/tgriesser/bookshelf/issues/134
user.related('accounts').attach({ account_id: 42, user_id: 84, order: 1})