programing

Sequalize의 두 테이블 사이에 여러 유형의 다대다 관계가 있는 경우

procenter 2022. 9. 28. 22:21
반응형

Sequalize의 두 테이블 사이에 여러 유형의 다대다 관계가 있는 경우

노드용 Sequelize를 사용하고 있으며 사용자와 아이템이 있습니다.사용자는 투표 또는 추천과 같은 다양한 방법으로 항목과 상호 작용할 수 있습니다(이 경우 서로 다른 두 가지 사항).

처음에는 두 가지 다른 관계를 가지려고 했는데 Sequelize는 remove Item 콜이 하나밖에 없어서 어떤 것을 지정해야 할지 모르겠어요.

플랜 2는 1개의 다대 다테이블에 추가 요소 "type"을 작성하여 종류를 지정할 수 있도록 하는 것이었습니다.추가 시 유형을 지정할 수 있습니다.이로 인해 위조 키와 기본적으로 쌍을 고유하게 만드는 두 가지 문제가 발생했습니다.DB에서 수동으로 제약을 제거하여 수정했습니다(ID를 프라이머리 키 자동증분으로 설정).두 번째로는 어떻게 삭제해야 할지 모르겠어= 타입을 원하는 타입으로 지정하면 좋을지.

코드:

테이블을 작성하려면:

  var UserActions = sequelize.define('userActions', {
id: {
  type: DataTypes.INTEGER,
  primaryKey: true,
  autoIncrement: true
},
type:       DataTypes.STRING
});

항목을 제거하려면:

        models.Item.findOne({where: {id : params.itemID}}).then(function (video){           
        models.User.findOne({where: {id : params.itemID}}).then(function (user){            
            if(params.applaud == "true") {
                console.log("Add applaud");
                user.addItem(video,{type:"commend"});
            } else {
                user.removeItem(item,{where: {type:"commend"}});
                console.log("Remove, Commendation");
            }
            res.json({'response' : 'Success'});
    });     
});

문제는 추천만 삭제하고 싶을 때 아이템과 사용자 간의 모든 상호작용이 삭제된다는 것입니다.

Sequelize에서 동일한 두 테이블 간의 여러 대 여러 관계를 가장 잘 관리하는 방법은 무엇입니까?

그래, 알았어.

연결에서 'as'를 통해 별칭을 지정해야 합니다.

User.belongsToMany(models.Item, {through: 'votes', as: 'votes'});
User.belongsToMany(models.Item, {through: 'commend', as: 'commend'});

다음으로 쿼리를 추가할 수 있습니다.

    models.Item.findOne({where: {id: item.id}, 
        include: [{
            model: models.User,
            as: 'votes'
        }]
    })

추가할 수 있는 항목:

user.addVote(item);

또는

user.addCommend(item);

삭제 방법:

user.removeVote(item);

또는

user.removeCommend(item)

그리고 그것은 원하는 대로 작동한다.

언급URL : https://stackoverflow.com/questions/38648560/having-multiple-types-of-many-to-many-relationships-between-two-tables-in-sequal

반응형