2014-04-04 46 views
3

之間的友誼我有2種型號Sequelize.js創建2個用戶

用戶

module.exports = function (sequelize, DataTypes) { 
var User = sequelize.define('User', { 
    email: { 
     type: DataTypes.STRING, 
     validate: { 
      isEmail: true 
     } 
    } 
}, { 
    classMethods: { 
     associate: function (models) { 
      User.hasMany(models.User, {as: 'Friends', through: models.Friendship}); 
     } 
    }, 
    updatedAt: false 
}); 

return User;}; 

友誼

module.exports = function (sequelize, DataTypes) { 
var Friendship = sequelize.define('Friendship', { 
    accepted: { 
     type: DataTypes.BOOLEAN, 
     defaultValue: false, 
     allowNull: false 
    } 
}, { 
}); 

return Friendship;}; 

正如你所看到的用戶擁有衆多用戶朋友和這創建了下表:

**Friends** 
PK user_id 
PK friends_id 
    accepted 

現在我有用戶鮑勃ID爲1,用戶Alice用ID 2.

如果我做

bob.addFriend(alice); 

它創建在朋友表中的下列行

user_id = 1 
friends_id = 2 
accepted = false 

但當我做

alice.hasFriend(bob); 

我因爲沒有行(user_id = 2 & & friends_id = 1)而變得錯誤。

我如何創建一個像用戶之間的關係這樣的友誼,所以我可以和Bob結交朋友Alice,但是Alice必須證實他們確實是朋友?

當Bob與朋友Alice交朋友時,我可以擁有兩行接受的狀態,如:(1,2,true)和(2,1,false),但我不知道如何顯示Bobs朋友?鮑勃與愛麗絲結識的事實並不意味着她接受了他的朋友請求。對於每個鮑勃的朋友,我都要檢查對方(即X接受了鮑勃的友誼),以確保鮑勃和X確實是朋友。

謝謝。

+0

你對一般的2行或者你只是不想創建數據集在自己的每一次?我仍在考慮這種行爲。如果這是一個錯誤或意圖,我不能100%確定。 – sdepold

+0

@sdepold感謝您的幫助!我已經更新了問題的最後一段。我只是不知道如何創建與「等待」狀態的友誼關係,即,如果Bob向Alice發送好友請求,Alice需要確認他們是好友,但由於alice.hasFriend(bob)返回false,所以我卡住。如果沒有ORM,我會爲alice實現hasFriends作爲與其中(user_id = bob.id和friends_id = alice.id)或(user_id = alice.id和friends_id = bob.id)的JOIN,這將覆蓋雙方並給出所有場景愛麗絲開始了友誼,愛麗絲結識了朋友。 –

+0

不,我不認爲它是一個錯誤。這些關聯正常工作,它只是一個缺失的功能/功能。 –

回答

0

您只需重寫方法hasFriend用自己的邏輯

 classMethods: { 
      associate: function (models) { 
      }, 

     }, 
     instanceMethods: { 
      hasFriend: function (user) { 
       // write any logic for check it .... 
       return sequelize.models.find({where:{x:y}}); 
      } 
     },