Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sails.js Sailsjs在beforeCreate期间向模型添加一对多关联_Sails.js - Fatal编程技术网

Sails.js Sailsjs在beforeCreate期间向模型添加一对多关联

Sails.js Sailsjs在beforeCreate期间向模型添加一对多关联,sails.js,Sails.js,每当新用户创建时,我都会尝试为用户和宠物提供一个默认关联 Model::User.js var User = { attributes: { name: {type: 'string'}, // Add a One Way Relation to pet model pets: { collection: 'pet' }, },

每当新用户创建时,我都会尝试为用户和宠物提供一个默认关联

Model::User.js

    var User = {
        attributes: {
            name: {type: 'string'},
            // Add a One Way Relation to pet model
            pets: {
                collection: 'pet'
            },
        },

      /*** This did not work ***/
      beforeCreate: function (user, next) {
        var defaultPet = {name: 'Default Pet 1'};
        Pet.find(defaultPet).exec(function(err, pet) {
            user.name = "BEFORECREATE",
            user.pets = pet[0].id;
            next();
        });
      },

    }

module.exports = User;
但是,当创建新记录时,user.pet为[],但user.name更改为“BEFORECREATE”

如何为创建的新用户自动获取user.pets=[{name:'Default Pet 1'}]

还是有更好的地方设置这些默认值

-----更新:更多信息

我目前正在使用sails磁盘

型号:Pet.js

module.exports = {
  attributes: {
    name: {
        type: 'string',
        required: true
    }
  }
};

不能在生命周期回调中向模型添加关联,如创建之前的
。目前,Waterline会在生命周期回调运行之前查找和处理类似的“嵌套模型”,因此,在调用
beforeCreate
之前,为时已晚。最简单的解决方案是创建一个
User.createUser
类方法,该方法封装了所需的逻辑:

  createUser: function(data, cb) {
    // If there are already pets specified, just use those
    if (data.pets) {return User.create(data).exec(cb);}
    // Otherwise look up the default pet
    Pet.findOne({name:"Default Pet 1"}).exec(function(err,pet) {
      // Return in case of error
      if (err) {return cb(err);}
      // Assuming the default pet exists, attach it
      if (pet) {
        console.log("SETTING DEFAULT PET", pet.id);
        data.pets = [pet.id];
      }
      // Create the pet
      return User.create(data).exec(cb);
    });
  }
请注意:

  • 在您的示例中,您直接将
    pets
    设置为一个ID,但由于它是一个集合,您必须将其设置为一个数组
  • 如果您使用的是
    sails disk
    适配器,则需要在模型中设置
    schema:true
    ,才能使其正常工作
  • 您返回的新
    用户
    模型将不会被填充;您必须使用新用户ID执行
    查找
    ,并使用
    填充('pets')
    ,才能附加宠物数据

  • 我个人在我的模型中添加了一个临时字段,将我需要的ID放在那里,然后转到afterCreate将临时字段的ID放在集合中。