1

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

1 に答える 1

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

ノート:

  • 私は上記をテストしておらず、同様のケースも行っていません (単一のテーブルでの多対多)
  • usersfollowsBookshelf.js のドキュメントでは、接続テーブル ( ) が個別の PK ではなく複合 PK を持つことを期待していると暗に述べているようです。テーブル構造を変更できない場合は、使用する必要がある場合がありthroughます。

その複合PKを試すことができる/必要な場合は、次のようにする必要があります。

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

とにかく、上記が機能するかどうかはわかりません-私は本棚の経験があまりありません-そうでない場合は、より知識のある誰かがより良い答えを出すことを期待しましょう.

于 2015-03-03T18:33:16.810 に答える