"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > सिद्धांत DBAL 4 पर कस्टम अनुक्रमणिका पर ध्यान न दें

सिद्धांत DBAL 4 पर कस्टम अनुक्रमणिका पर ध्यान न दें

2024-07-31 को प्रकाशित
ब्राउज़ करें:280

Ignore custom indexes on Doctrine DBAL 4

आप इकाई फ़ाइल पर #[ORM\Index(fields: ['fieldName'] विशेषता का उपयोग करके डेटाबेस इंडेक्स बना सकते हैं और डॉक्ट्रिन आपके लिए इंडेक्स को प्रबंधित करने के लिए बाकी काम करेगा, लेकिन मैं उस बारे में बात नहीं करूंगा.

जैसे-जैसे आपका प्रोजेक्ट बढ़ता है या विशिष्ट आवश्यकताओं की आवश्यकता होती है, आपको GIST, GIN, BRIN, आदि (https://www.postgresql.org/docs/current/indexes-types.html) जैसे कस्टम इंडेक्स प्रकारों का उपयोग करने की आवश्यकता हो सकती है। सिद्धांत डेटाबेस-विक्रेता-विशिष्ट सूचकांक प्रकार को आउट-ऑफ-द-बॉक्स (रेफ) बनाने का समर्थन नहीं करता है।

इस समस्या से निपटने के लिए आप या तो क्रिएट इंडेक्स डीडीएल को सीधे डेटाबेस में निष्पादित कर सकते हैं या सिद्धांत-माइग्रेशन फ़ाइल पर डीडीएल लिख सकते हैं। बाद वाला विकल्प आपको परिवर्तनों को तैनात करने या रोलबैक करने में आसानी का लाभ देता है।

इससे कोई फर्क नहीं पड़ता कि आप कस्टम इंडेक्स बनाने के लिए किस विधि का उपयोग करते हैं, सिद्धांत हमेशा उन कस्टम इंडेक्स को अनमैप्ड इंडेक्स के रूप में चिह्नित करेगा, इसलिए यदि आप सिद्धांत निष्पादित करते हैं: स्कीमा: मान्य करें तो आपको एक त्रुटि मिलेगी जो बताती है कि यदि आपका डेटाबेस सिंक में नहीं है, तो डॉक्ट्रिन:स्कीमा:अपडेट --डंप-एसक्यूएल या डॉक्ट्रिन:माइग्रेशन:डिफ को निष्पादित करते समय भी यह आपको कस्टम इंडेक्स को हटाने के लिए DROP INDEX... स्टेटमेंट दिखाएगा।

समाधान

मैं इन पैकेज संस्करणों का उपयोग कर रहा हूं। (मेरा मानना ​​है कि समाधान पैकेजों के समान प्रमुख संस्करण पर काम करेगा):

  • सिद्धांत/डीबीएएल 4.0.4
  • सिद्धांत/सिद्धांत-बंडल 2.12.0

मुझे इसे संभालने के लिए कई ट्यूटोरियल मिले लेकिन यह संतोषजनक नहीं है:

  • https://www.liip.ch/en/blog/doctline-and-generated-columns यह अब काम नहीं कर रहा था क्योंकि Doctrin DBAL ने DBAL 4 पर इवेंट मैनेजर को हटा दिया है। (संदर्भ)
  • https://medium.com/yousign-engineeering-product/ignore-custom-indexes-on-doctline-dbal-b5131dd22071 यह एक बहिष्करण संदेश दिखा रहा था "प्लेटफ़ॉर्म_सर्विस" कॉन्फ़िगरेशन कुंजी सिद्धांत-बंडल 2.9 के बाद से बहिष्कृत है। DBAL 4 अब कनेक्शन पैरामीटर के माध्यम से कस्टम प्लेटफ़ॉर्म सेट करने का समर्थन नहीं करेगा। (संदर्भ)

मुझे यहां https://github.com/doctline/DoctrineBundle/issues/1656 पर प्लेटफ़ॉर्म_सर्विस कॉन्फ़िगरेशन प्रतिस्थापन के बारे में एक GitHub समस्या मिली।

इन 2 पेजों को पढ़ने से मुझे डॉक्ट्रिन मिडलवेयर के माध्यम से कस्टम डीबीएएल प्लेटफॉर्म का उपयोग करने के बारे में सारी जानकारी मिली:

  • https://github.com/doctline/dbal/pull/5699
  • https://symfony.com/bundles/DoctrinBundle/current/middlewares.html

आखिरकार, स्रोत कोड में खोजबीन करने के बाद, मुझे समाधान मिल गया। आपको 4 फाइलें बनाने की जरूरत है, 2 फाइलें डॉक्ट्रिन मिडलवेयर के बारे में हैं और 2 अन्य फाइलें डॉक्ट्रिन डीबीएएल प्लेटफॉर्म और स्कीमा के बारे में हैं।

नेमस्पेस और क्लास नाम को अपनी आवश्यकताओं के अनुसार संशोधित करें।

 true,
        'index_name_2' => true,
    ];

    #[\Override]
    protected function _getPortableTableIndexesList(array $tableIndexes, string $tableName): array
    {
        $indexes = parent::_getPortableTableIndexesList($tableIndexes, $tableName);

        foreach (array_keys($indexes) as $indexName) {
            if (isset(self::IGNORED_INDEXES[$indexName])) {
                unset($indexes[$indexName]);
            }
        }

        return $indexes;
    }
}
विज्ञप्ति वक्तव्य यह आलेख यहां पुन: प्रस्तुत किया गया है: https://dev.to/indagunawan/ignore-custom-indexes-on-doctline-dbal-4-387j?1 यदि कोई उल्लंघन है, तो कृपया इसे हटाने के लिए स्टडी_गोलंग@163.com से संपर्क करें।
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3