NodeJS Bookshelf用户 - 关注者关系示例

时间:2015-02-28 19:34:13

标签: node.js postgresql bookshelf.js

我试图与Bookshelf创建用户关注者关系,但我无法实现它:(

你能用一个简单的样本来说明我吗?

感谢您的时间:)

SQL:

DROP TABLE IF EXISTS usersfollows;
DROP TABLE IF EXISTS users;

CREATE TABLE users (
    "id" serial NOT NULL ,
    "username" varchar(40) NOT NULL ,
    "email" varchar(255) NOT NULL ,
    "pass" varchar(255)
    PRIMARY KEY ("id")
);

CREATE UNIQUE INDEX "users_username" ON users (username);
CREATE UNIQUE INDEX "users_email" ON users (email);
CREATE UNIQUE INDEX "users_hash" ON users (uuid);
CREATE UNIQUE INDEX "users_uuid" ON users (uuid);
SELECT setval('users_id_seq', 18);

CREATE TABLE usersfollows (
    "id" serial NOT NULL ,
    "userId" integer NOT NULL REFERENCES users,
    "followId" integer NOT NULL REFERENCES users,
    PRIMARY KEY ("id")
);

1 个答案:

答案 0 :(得分:1)

这可能有效:

var User = Bookshelf.model.extend({
    tableName: 'user',
    follows: function() {
        return this.belongsToMany(User, 'usersfollows', 'followId', 'userId');
    },
    followers: function() {
        return this.belongsToMany(User, 'usersfollows', 'userId', 'followId');
    }
});

注意:

  • 我没有测试过上面的内容,也没有做过类似的情况(单个表上多对多)
  • Bookshelf.js文档似乎隐含地声明它希望连接表(usersfollows)具有复合PK而不是单独的PK。如果您无法修改表格结构,则可能需要使用through - 请参阅Bookshelf.js documentation for belongsToMany

如果你可以/需要尝试复合PK的东西,它应该是这样的:

CREATE TABLE usersfollows (
    "userId" integer NOT NULL REFERENCES users,
    "followId" integer NOT NULL REFERENCES users,
    PRIMARY KEY ("userId", "followId")
);

无论如何,我不知道上述内容是否有效 - 我自己对书架没有太多经验 - 如果没有,请让有更多知识渊博的人带来更好的答案