Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

लारवेल का क्वेरी बिल्डर JSON चयनकर्ता `फ़ील्ड-> कुंजी` सिंटैक्स त्रुटि का कारण बनता है

आपकी क्वेरी में कुछ भी गलत नहीं है। यह आपका परिवेश है।

समस्या

लारवेल का MySqlGrammar फ़ील्ड->कुंजी . का अनुवाद करता है फ़ील्ड->'$.key' . में फ़ील्ड नामों में (लारावेल की ओर) संकेतन -स्टाइल एक्सट्रैक्शन (MySQL की तरफ):

/**
 * Wrap the given JSON selector.
 *
 * @param  string  $value
 * @return string
 */
protected function wrapJsonSelector($value)
{
    $path = explode('->', $value);

    $field = $this->wrapValue(array_shift($path));

    $path = collect($path)->map(function ($part) {
        return '"'.$part.'"';
    })->implode('.');

    // Here:
    return sprintf('%s->\'$.%s\'', $field, $path);
}

मैंने अभी पुष्टि की है कि मारियाडीबी -> निष्कर्षण ऑपरेटर JSON_EXTRACT () समारोह। हालाँकि, वही क्वेरी वैनिला MySQL 5.7 सर्वर के विरुद्ध काम करती है।

यह मानते हुए परीक्षण तालिका:

╔════╤══════════════════╗
║ id │ payload          ║
╟────┼──────────────────╢
║  1 │ {"a": 1, "b": 2} ║
╚════╧══════════════════╝

एक क्वेरी जो -> . का उपयोग करती है निष्कर्षण ऑपरेटर:

SELECT payload->"$.b" FROM test;

मारियाडीबी 10.2.8 के खिलाफ विफल रहता है जबकि यह एक सही 2 . उत्पन्न करता है एक MySQL 5.7.19 सर्वर के विरुद्ध।

समाधान

सही समाधान इस बात पर निर्भर करता है कि आप उत्पादन पर क्या उपयोग कर रहे हैं।

MariaDB बदलें

यदि आप MySQL का उपयोग कर रहे हैं, तो अपने विकास वातावरण में MariaDB को MySQL से बदलें। Homebrew द्वारा प्रबंधित macOS मशीन पर, यह इतना आसान होगा:

brew services stop mysql
brew uninstall mariadb
brew install mysql
brew services start mysql

आपका डेटा बरकरार रहेगा।

अपने प्रश्नों को फिर से लिखें

हालांकि, यदि आप उत्पादन में मारियाडीबी का उपयोग कर रहे हैं, तो आपको JSON_EXTRACT() का उपयोग करने के लिए अपने प्रश्नों को फिर से लिखना होगा। एलियास का पहले ही उल्लेख किया गया है के रूप में कार्य करें . जैसा कि आप देख सकते हैं कि आपको लारवेल एपीआई के साथ बहुत अधिक क्रियात्मक होने की आवश्यकता है।

उपरोक्त प्रश्न होगा:

परीक्षण से
SELECT JSON_EXTRACT(payload, "$.b") FROM test;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. enwiki-latest-categorylinks.sql को mysql में लोड कर रहा है

  2. Mysql तालिका में अधिकतम मान पंक्ति का चयन कैसे करें

  3. Regexp और mysql:क्या कोई AND ऑपरेटर है

  4. फ़ोरैच लूप का उपयोग करके एकाधिक फ़ील्ड सम्मिलित करें

  5. दो तिथियों के बीच अभिलेखों का चयन