पदावनति: Doctrine \ ORM \ Mapping \ UnderscoreNamingStrategy को बिना नंबर बताए उसे हटा दिया जाता है।


53

मैं सिम्फनी 4.3.8 का उपयोग कर रहा हूं और मुझे थ्रेड डिप्रेसेशन के बारे में कोई जानकारी नहीं मिल रही है:

उपयोगकर्ता का पदावनत: Doctrine \ ORM \ Mapping \ UnderscoreNamingStrategy बनाना बिना नंबर की जानकारी के पदावनत किया जाता है और Doctrine ORM 3.0 में हटा दिया जाएगा।

Doctrine \ ORM \ Mapping \ UnderscoreNamingStrategy बनाना बिना नंबर की जानकारी के पदावनत किया जाता है और Doctrine ORM 3.0 में हटा दिया जाएगा।

मैंने स्टैकट्रेस में खोज की और यह पाया:

class UnderscoreNamingStrategy implements NamingStrategy
{
private const DEFAULT_PATTERN      = '/(?<=[a-z])([A-Z])/';
private const NUMBER_AWARE_PATTERN = '/(?<=[a-z0-9])([A-Z])/';

/**
 * Underscore naming strategy construct.
 *
 * @param int $case CASE_LOWER | CASE_UPPER
 */
public function __construct($case = CASE_LOWER, bool $numberAware = false)
{
    if (! $numberAware) {
        @trigger_error(
            'Creating ' . self::class . ' without making it number aware is deprecated and will be removed in Doctrine ORM 3.0.',
            E_USER_DEPRECATED
        );
    }

    $this->case    = $case;
    $this->pattern = $numberAware ? self::NUMBER_AWARE_PATTERN : self::DEFAULT_PATTERN;
}

इस वर्ग में, कंस्ट्रक्टर को हमेशा परमेस के बिना कहा जाता है, इसलिए $ नंबरवेयर हमेशा गलत होता है।

इस वर्ग को उस फाइल में कहा जाता है जिसे सिम्फनी डिपेंडेंसी इंजेक्शन द्वारा उत्पन्न किया गया है, इसलिए मैं इसे "एडिट" नहीं कर सकता ...

मैंने सोचा कि शायद यह सिद्धांत में था। श्याम:

doctrine:
orm:
    auto_generate_proxy_classes: true
    naming_strategy: doctrine.orm.naming_strategy.underscore
    auto_mapping: true
    mappings:
        App:
            is_bundle: false
            type: annotation
            dir: '%kernel.project_dir%/src/Entity'
            prefix: 'App\Entity'
            alias: App

लेकिन मुझे संख्या को ज्ञात करने का कोई विकल्प नहीं मिला :(


3
बस एक ताजा 4.4.0 (बस जारी किया, हाँ) परियोजना और doctrine.yaml बनाते हैं इसमें "naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware" है। तुम्हारा ट्वीक करने की कोशिश करो।
सेराड

जवाबों:


111

ज्यादातर मामलों में मैं सिर्फ इस तरह के सवाल का जवाब एक टिप्पणी के साथ दूंगा लेकिन मुझे संदेह है कि अन्य डेवलपर्स इस मुद्दे पर चल सकते हैं। मैंने लगभग थोड़ा बिताया और इस मुद्दे पर कोई स्पष्ट दस्तावेज नहीं पा सका। शायद इसलिए कि DoctrineBundle Doctrine लोगों के नियंत्रण में है और सिम्फनी डेवलपर्स नहीं। या शायद मैं सिर्फ एक बुरा खोजकर्ता हूं।

किसी भी स्थिति में, 4.3 और 4.4 के बीच अंडरस्कोर नामकरण रणनीति के लिए सेवा का नाम बदल दिया गया था।

# doctrine.yaml
orm:
  # 4.3
  naming_strategy: doctrine.orm.naming_strategy.underscore
  # 4.4
  naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware

और डेवलपर्स को नाम बदलने के लिए चेतावनी देने के लिए एक मूल्यह्रास संदेश जोड़ा गया था। अगर संदेश सिर्फ एक छोटे से अधिक स्पष्ट था, लेकिन ओह अच्छी तरह से अच्छा होता। इसलिए यदि आप किसी मौजूदा ऐप को 4.4 और उससे आगे के लिए अपग्रेड कर रहे हैं, तो आपको मूल्यह्रास संदेश को दूर करने के लिए अपने doctrine.yaml फ़ाइल को मैन्युअल रूप से संपादित करना होगा।

परिवर्तन क्यों किया गया था, इस बारे में कुछ और जानकारी (धन्यवाद @ भजन): https://github.com/doctrine/orm/blob/2.8.x/UPGRADE.md#deprecated-number-unaware-doctormormappingpunderscorenamingstrategy https: // github। com / सिद्धांत / ORM / मुद्दों / 7855

अभी भी वास्तव में स्पष्ट नहीं है कि "उन्होंने" इस तरह से चीजें करने का विकल्प क्यों चुना लेकिन ओह अच्छी तरह से। आप शायद "बिन / कंसोल सिद्धांत: स्कीमा: अपडेट --dump-sql" को केवल यह देखना चाहते हैं कि क्या यह आपके डेटाबेस कॉलम के नामों को प्रभावित करता है और तदनुसार समायोजित होता है। परिवर्तन अब कई हफ्तों के लिए हो गए हैं और परिवर्तन पर नाराजगी के कई संकेत नहीं लगते हैं, इसलिए मुझे लगता है कि अधिकांश स्तंभ नामों में एम्बेडेड संख्या नहीं है। अब तक कम से कम।


पुरानी रणनीति में बदलाव (गलत तरीके से) $ singleMd5Key के लिए single_payu_md5key और नए एक (सही तरीके से) single_payu_md5_key के लिए। लेकिन ई.पू. परिवर्तन है कि हम सब गड़बड़ है।
तोमेक कोबायिल्स्की

@ TomekKobyliński क्या आप कोड के अलावा इस पर कोई भी दस्तावेज़ पा सकते हैं? फिर भी यह समझने के लिए संघर्ष करना कि नामकरण सम्मेलन क्यों बदल जाएगा (और इस तरह संभवतः एक डेटाबेस स्कीमा परिवर्तन को मजबूर करता है) जब डॉक्ट्रिन 3 आता है। बस ऐसा लगता है कि दोनों दृष्टिकोण का समर्थन किया जाएगा।
सेराड

1
इसलिए एक डेटाबेस स्कीमा बदलने के लिए आपको अपने यूनिट मैपिंग को मैन्युअल रूप से अपडेट करना होगा? निश्चित नहीं है कि कौन सा बदतर है और यह वास्तव में इस सवाल का जवाब नहीं देता है कि आखिर बदलाव क्यों हो। अधिक "सही" रणनीति प्रदान करने में कोई समस्या नहीं है लेकिन मुझे अभी भी समझ में नहीं आया कि मूल रणनीति किसी भी प्रासंगिक अर्थ में "गलत" क्यों है।
सेराड

1
इस पदावनति में गोताखोरी करने के बाद यहाँ आया (साथ ही फ़ापुनिट चलाकर)। उत्तर में नुस्खा yaml से लिंक करना अच्छा होगा, क्योंकि यह प्रस्तावित फिक्स की पुष्टि करता है: github.com/symfony/recipes/blob/master/doctrine/doctrine-bundle/…
Rvanlaak

1
@Cerad सिद्धांत के उन्नयन की जानकारी में कुछ है: github.com/doctrine/orm/blob/2.8.x/… मुझे लगता है कि github.com/doctrine/orm/issues/7855 प्रासंगिक मुद्दा है।
जंहा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.