मैं प्रत्येक आदेश के लिए अद्वितीय आदेश संख्या उत्पन्न करना चाहता हूं। मैं ऑर्डर नंबर के अंदर बनाए गए ऑर्डर की आईडी को नेस्ट करने की कोशिश कर रहा हूं।
सीक्वेलाइज़ में हुक होते हैं जिनका वर्णन docs में किया गया है।
क्या इनमें से किसी हुक का उपयोग करना संभव है? मैं पासवर्ड सहेजने से पहले हैश पासवर्ड के लिए beforeCreate() और beforeUpdate() का उपयोग करता हूं।

'use strict';
module.exports = (sequelize, DataTypes) => {
  const Order = sequelize.define('Order', {
    buyer_id: DataTypes.INTEGER.UNSIGNED,
    order_status_code: DataTypes.TINYINT.UNSIGNED,
    order_detail: DataTypes.TEXT,
    order_date: DataTypes.DATE
  }, { 
     hooks: {
          beforeSave: function(order, options) {
            order.order_number = order.order_id + "UNIQUE"
     }
}
});
  Order.associate = function(models) {
    // associations can be defined here
    Order.hasOne(models.OrderItem,{foreignKey: "order_id"})
  };
  return Order;
};

अपडेट करें
मैं नीचे विधि की कोशिश की, लेकिन यह काम नहीं कर रहा। हुक चल रहा है लेकिन पंक्ति अद्यतन नहीं की जा रही है।

    module.exports = (sequelize, DataTypes) => {
  const Order = sequelize.define('Order', {
    buyer_id: DataTypes.INTEGER.UNSIGNED,
    order_status_code: DataTypes.TINYINT.UNSIGNED,
    order_detail: DataTypes.TEXT,
    order_date: DataTypes.DATE
  }, {
    hooks:{
      afterCreate: function(order, options) {
        order.update({
          order_number : 'OD' + Date.now + order.id + order.OrderItem.product_id + order.buyer_id
        })
      }
    }
   });
  Order.associate = function(models) {
    // associations can be defined here
    Order.hasOne(models.OrderItem,{foreignKey: "order_id"})
  };
  return Order;
};
1
Sujeet Agrahari 10 जिंदा 2020, 07:54

1 उत्तर

सबसे बढ़िया उत्तर

मैंने नीचे दी गई विधि की कोशिश की और मैंने बहुत सी चीजों की खोज की जो एक मॉडल परिभाषा के अंदर की जा सकती हैं।

'use strict';
module.exports = (sequelize, DataTypes) => {
 const Order = sequelize.define('Order', {
   buyer_id: DataTypes.INTEGER.UNSIGNED,
   order_status_code: DataTypes.TINYINT.UNSIGNED,
   order_detail: DataTypes.TEXT,
   order_date: DataTypes.DATE,
   order_number: DataTypes.STRING(20)
 }, {
   hooks:{
     afterCreate:  async function(order, options) {
     await order.update(
       {
         order_number : 'OD' + Date.now() + order.id + order.OrderItem.product_id + order.buyer_id
       },
       {
         transaction: options.transaction
       })
     }
   }
  });
 Order.associate = function(models) {
   // associations can be defined here
   Order.hasOne(models.OrderItem,{foreignKey: "order_id"})
 };
 return Order;
};

इसलिए, जब कोई उपयोगकर्ता ऑर्डर बनाता है। मैं दो तालिकाओं में डेटा सम्मिलित करने के लिए लेनदेन का उपयोग करता हूं। इसलिए मैं हुक के अंदर order.OrderItem.product_id तक पहुंच सकता हूं।
लेकिन अगर आप किसी अन्य मॉडल को एक्सेस करना चाहते हैं, तो आप हमेशा sequelize.models.YourModel
का उपयोग कर सकते हैं मैं async और await का उपयोग कर रहा हूं क्योंकि मुझे प्रतिक्रिया में order_number भी चाहिए। मैं इसे हुक में लेनदेन पास करके प्राप्त करता हूं।
अगर किसी को कोई बेहतर तरीका मिले तो कृपया सुझाव दें।

1
Sujeet Agrahari 10 जिंदा 2020, 06:54