代码之家  ›  专栏  ›  技术社区  ›  Noitidart

通过模型设置创建唯一的多键索引

  •  0
  • Noitidart  · 技术社区  · 6 年前

    我正在使用Sails v1.1-

    我根据这里的sails文档创建了一个多对多的定制模型关联- https://sailsjs.com/documentation/concepts/models-and-orm/associations/through-associations

    这个 PetUser 模型有两列 pet user

    await PetUser.create({ user: 1, pet: 33 }); // should succeed
    await PetUser.create({ user: 1, pet: 44 }); // should succeed as user/pet combination is different
    await PetUser.create({ user: 1, pet: 33 }); // should fail
    

    我试着添加 unique: true 对双方 owner 上的属性 宠物用户 独特:真实 得到尊重。

    myApp/api/models/PetUser.js

    module.exports = {
      attributes: {
        owner: {
          model:'user',
          unique: true
        },
        pet: {
          model: 'pet',
          unique: true
        }
      }
    }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Pavlo Zhukov    6 年前

    为了实现类似的行为,我添加了一个组合属性并将其标记为unique。另外,我补充道 beforeCreate beforeUpdate 我在模型钩子上生成组合属性来检查它是否唯一。

    const YourModel = {
    
      attributes: {
        owner: {
          model: 'user',
        },
        pet: {
          model: 'pet',
        },
        petOwner: {
          type: 'string',
          unique: true,
        }
      },
    
      beforeCreate : function(values,cb) {
        // TODO get ids from related records or reset to default on missed relation record if you need it
        const petId = 35;
        const ownerId = 8;
        values.petOwner = `${petId}-${ownerId}`;
        cb();
      },
    
      beforeUpdate : function(values,cb) {
        YourModel.beforeCreate(values, cb)
      },
    };
    
    module.exports = YourModel;
    

    结果,当您尝试添加具有相同关系的记录时,您将得到 E_UNIQUE 如你所料。