模型方法在sails js中不起作用

时间:2018-03-28 12:50:33

标签: javascript mysql node.js sails.js

我使用的是风帆v0.12,我的MySql关系数据库中有不同的模型,但关注的区域在于这两个模型 1.用户 2.任命

我想将apptCustomer和apptProvider数据添加到约会模型中 但数据库中的值为NULL

我的用户模型是:

module.exports = {

  attributes: {
    name: {
      type: "string",
    },
    email: {
      type: "email",
      required: true,
      unique: true
    },
    contact_no:{
      type: "int",
      maxLength: 15,
      //required: true,
    },
    address: {
      type:"longtext",
     //required: true,
    },
    userId:{
      type: "string",
      primaryKey: true,
      unique:true
    },
    gtoken:{
      type: "string"
    },
    provider:{
     type:"string"
    },
    cancel:{
      type: "boolean",
   //   required: true
    },
    business_name:{
      type:"string",
      unique:true
    },
    business_category:{
      type:"string"
    },
    roles:{                                                 // Many to Many = User <-> User-role <-> Role 
      collection:'Role',
      through:'userrole',
    },
    services:{
      collection:'Service',
      through:'serviceprovider',                          // Many to Many = User (provider) <-> Service-provider <-> Service
    },
    schedules:{                                             // One to One = User (provider) - Schedule
      collection:'Schedule',
      via:'owner',
    },
    providerAppointments:{                                       // One to Many = User(customer) - multiple Appointments
      collection:'Appointment',
      via:'appProvider',
    },
    customerAppointments:{                                      
      collection:'Appointment',                                    // One to Many = User(provider) - multiple Appointments
      via:'appCustomer'
    }

  }

};

我的预约模式是

module.exports = {

  attributes: {
    appointment_id:{
      type:'int',
      primaryKey: true,
      autoIncrement:true
    },
    appointmentDate: {
      type: 'datetime',
      required: true,
    },
    start_time: {
      type: 'string',
      required: true,
    },
    end_time: {
      type: 'string',
    },
    status: {
      type: 'string',
      enum: ['booked', 'canceled']
    },
    appProvider: {
      model: 'user',
    },
    appCustomer:{
      model: 'user',
    },
    serviceAppointment: {
      model: 'service',
    }
  }
};

我的模型方法如下

 Appointment.findOrCreate({appointmentDate:req.body.values.appointmentDate, start_time:req.body.values.start_time, end_time:req.body.end_time, status: status},{appointmentDate:req.body.values.appointmentDate, start_time:req.body.values.start_time, end_time:req.body.end_time, status: status})
                    .exec(function apptCreated(err,appt){
                        if(err) { sails.log('err',err)}

                        Service.findOne({ service_id : req.body.values.selected_service})
                                .exec(function(err,service){
                                    service.serviceAppointments.add(appt);
                                    service.save(function(err,result){
                                        if(err) { sails.log(err)}
                                    })
                                }), 
                        User.find({userId: req.body.businessId})  
                            .populate('roles')
                            .exec(function(err,provider){
                                _.map( provider.roles, role => { // Problem lies here .. this method is not working
                                  if(role.role_id==1){
                                    provider.providerAppointments.add(appt);
                                    provider.save(function(err, result){
                                        if(err) { sails.log(err)}
                                        sails.log('appointment added to provider')
                                    })
                                }  
                            })
                        }),                  
                        //Appointment adding to Customer
                        User.find({userId: req.body.customerId})  
                            .populate('roles')
                            .exec(function(err,customer){
                                _.map( customer.roles, role => { // Problem lies here... this method is not working
                                  if(role.role_id==2){
                                    customer.customerAppointments.add(appt)
                                    customer.save(function(err, result){
                                        if(err) { sails.log(err)}
                                        sails.log('appointment added to customer')
                                    })
                                }  
                            })
                        }),

                        // Adding contact to customer 

                        User.update({userId: req.body.customerId},{ contact_no: req.body.values.contact_no}) // this method works fine
                            .exec(function userUpdated(err, user){
                                if(err) { return sails.log(err)}
                                sails.log('contact number updated',user);
                        })

                })

1 个答案:

答案 0 :(得分:0)

据我所知,在您拨打provider.providerAppointments.add时,provider.providerAppointments仍然只是一个常规属性 - 可能是一组ID。

我认为您需要将.populate('providerAppointments')添加到User.find ...如果您这样做,那么provider.providerAppointments应该有.add方法,其工作方式与您预期的方式相同

当然,如果这是错误的来源,我会期待一个非常明确的错误消息,如provider.providerAppointments.add is not a function或其他一些错误消息。但是尝试添加填充,看看它是否解决了你的问题。