मुझे काम करने के लिए यह बहुत ही सरल वर्चुअल कॉलम नहीं मिल रहा है (surnameName)। यह क्वेरी परिणामों में वापस नहीं किया जाता है, लेकिन यह कोई त्रुटि भी नहीं डालता है।

मेरा मॉडल (मैंने अप्रासंगिक क्षेत्रों को हटा दिया):

const Person = connectionPool.define('person', {
    ID: {
        type: Sequelize.INTEGER,
        autoIncrement: true,
        allowNull: false,
        primaryKey: true
    },
    name: Sequelize.STRING,
    surname: Sequelize.STRING,
    surnameName: {
        type: Sequelize.VIRTUAL(Sequelize.STRING, ['surname', 'name']),           
        get() {
            return this.getDataValue('surname') + ' ' + this.getDataValue('name');
        }
    }
});

इस प्रकार मैं मॉडल से पूछता हूं:

const cfg = {
    where: {},
    limit: 10,
    raw: false, // tried with and without this line
    attributes: ['surnameName']
}
models.Person.findAll(cfg)
.then(results => {
   console.log(results[0]);
})

और कंसोल लॉग में मुझे यही मिलता है:

person {
    dataValues: { surname: 'Baggins', name: 'Frodo' }, // all other fields are autoexcluded by Sequelize
    ...
    _options:
        { isNewRecord: false,
            _schema: null,
            _schemaDelimiter: '',
            raw: true,                    // is true even if I set 'raw' to false in findAll options
            attributes: [ 'surnameName', 'surname', 'name' ]   // <= surnameName is there!
        }
    }

वर्चुअल कॉलम परिणामों में वापस नहीं किया जाता है, हालांकि लॉग इंस्टेंस से पता चलता है कि आंतरिक _options.attributes सरणी में फ़ील्ड है, इसलिए Sequelize किसी तरह स्वीकार करता है कि इसे जोड़ा जाना चाहिए। मैंने स्पष्ट रूप से raw=false को मोड़ने की कोशिश की, जैसा कि मैंने पढ़ा है कि raw में वर्चुअल कॉलम शामिल नहीं हैं, लेकिन इसका कोई प्रभाव नहीं है। परिणाम निश्चित रूप से raw नहीं हैं।

यहाँ क्या गलत हो सकता है? किसी भी तरह की सहायता को आभार समझेंगे!

0
Eggon 31 मार्च 2020, 15:20

1 उत्तर

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

गुण जावास्क्रिप्ट ऑब्जेक्ट को छिपाना संभव है। यहाँ एक उदाहरण है

function Person(fName, lName) {
  this.fName = fName;
  this.lName = lName;
  
  Object.defineProperties(this, {
      fullName: {
          get : function () {
              return this.fName + " " + this.lName; 
          }
      }
  });  
}

const ratul = new Person("Ratul", "sharker");

console.log(ratul);
console.log(ratul.fullName);

ध्यान से देखें कि console.log(ratul) fullName प्रिंट नहीं करता है, लेकिन fullName यहां बैठा है, console.log(ratul.fullName) में देखा गया मान लौटा रहा है।

इसी तरह की बात इस answer में मिल सकती है।

1
Ratul Sharker 31 मार्च 2020, 13:25