bookshelf.js - 使用 UpdatePivot 附加 "Not Null"列

标签 bookshelf.js knex.js

使用 bookshelfjs,我想将记录添加到包含附加的、不可为空的列的连接表中。

例如,users 表和accounts 表将有一个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 可以轻松完成,但如果可能,我想使用书架来完成。

最佳答案

您可以将名称/值对传递到 .attach 以在连接表记录上设置这些值。请参阅此 GitHub 问题第一部分中的示例:

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

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

关于bookshelf.js - 使用 UpdatePivot 附加 "Not Null"列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22139723/

相关文章:

node.js - Bookshelf.js - 如何保存多对多关系?

javascript - 如何转换 Bookshelf.js 上的查询(别名表)

node.js - 耐克斯 :Error Pool2 - Error: connect ECONNREFUSED

mysql - knex 迁移失败,但不会恢复更改

android - 无法补偿访问mysql时的时差

postgresql - 如何使用 knex 和 postgresql 有条件地更新多行?

mysql - 书架关系未按预期工作

javascript - 在 Node API 混淆中使用 knex.js 编写插入语句

node.js - Knexfile不读取环境变量?

javascript - 使用具有多个搜索条件的 Knex.js 和 SQL 的条件过滤器