मैं Knex (PostgreSQL) के साथ एक प्रश्न बना रहा हूँ:

knex('foos')
  .select(columnsThatAreAMixOfFooAndBarColumns)
  .leftJoin('bars', 'foos.bar_id', 'bars.id')
  .where({ 'foos.id': id })

जब मुझे परिणाम वापस मिलते हैं, तो मैं [{foo_id: 1, bar_id: 2, ... वापस नहीं प्राप्त करता हूं। इसके बजाय मैं [{ id: 1, ... वापस आ जाता हूं।

इतनी विचित्र बात यह है कि क्नेक्स सही क्वेरी बना रहा है: अगर मैं इसे लॉग करता हूं तो मुझे SELECT "foos"."id", "bars"."id", ... दिखाई देगा। लेकिन किसी अजीब कारण से मैं समझ नहीं पा रहा हूं, क्नेक्स सभी परिणामी स्तंभों को एक साथ मिलाने का फैसला करता है, इसलिए मैं पूरी तरह से bars.id खो देता हूं और foos.id का नाम बदलकर id कर दिया जाता है।

क्या कोई समझा सकता है कि क्या हो रहा है, और मैं इसे कैसे ठीक कर सकता हूं? मैंने select के बजाय columns का उपयोग करके returning जोड़ने का प्रयास किया है, और अन्यथा मैं क्वेरी कैसे बना सकता हूं, लेकिन यह मदद नहीं करता है, और फिर क्वेरी क्नेक्स बनाता है नहीं समस्या: यह परिणाम है।

संपादित करें: मैंने इसके बजाय knex.raw(query) का उपयोग करके वही सटीक क्वेरी फिर से चलाई ... और ठीक वही (id, foos_id) परिणाम नहीं मिला। तो यह निश्चित रूप से नहीं है कि क्वेरी कैसे बनाई जाती है यह समस्या है: मैं किसी भी तरह से क्नेक्स को परिणाम बनाने के लिए कुछ ऐसा कर रहा हूं जो योग्य कॉलम नामों को अनदेखा करता है।

0
machineghost 21 मार्च 2020, 05:09

1 उत्तर

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

ठीक है, जहां तक ​​मैं बता सकता हूं (और यह मुश्किल है क्योंकि प्रलेखन लगभग विशेष रूप से क्वेरी बिल्डिंग के बारे में है, परिणामों के बारे में लगभग कुछ भी नहीं है) जवाब है "यह सिर्फ Knex कैसे काम करता है"। ऐसा लगता है कि पुस्तकालय को योग्य नाम वापस करने के लिए और अधिक समझदारी होगी, लेकिन किसी भी कारण से ऐसा नहीं होता है।

इसके बजाय, यदि आप क्नेक्स में तालिकाओं में शामिल होना चाहते हैं, तो ऐसा लगता है कि आपके पास उपनाम (यानी foos.id AS foos_id) के लिए है नाम साझा करने वाले प्रत्येक कॉलम :(

2
machineghost 8 अप्रैल 2020, 18:25