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

我试图创build一个用户,追随者关系与书架,但我不能实现它:(

你能用一个简单的样本来模仿我吗?

谢谢你的时间 :)

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") ); 

这可能工作:

 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'); } }); 

注意:

  • 我没有testing过上述情况,也没有做过类似的情况(在一张桌子上多对多)
  • Bookshelf.js文档似乎隐含地指出,它期望连接表( usersfollows )有一个复合PK,而不是一个单独的。 如果你不能修改你的表结构,你可能需要through – 参阅belongsToMany的Bookshelf.js文档 。

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

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

无论如何,我不确定上述方法是否行得通 – 我对自己的书架不是太熟悉 – 如果没有,我们希望有更多的知识有更好的答案。