"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > تجاهل الفهارس المخصصة في Doctrine DBAL 4

تجاهل الفهارس المخصصة في Doctrine DBAL 4

تم النشر بتاريخ 2024-07-31
تصفح:900

Ignore custom indexes on Doctrine DBAL 4

يمكنك إنشاء فهارس قاعدة بيانات باستخدام السمة #[ORM\Index(fields: ['fieldName'] في ملف الكيان وسيقوم Doctrine بالباقي لإدارة الفهرس نيابةً عنك، ولكن لن أتحدث عن ذلك.

مع نمو مشروعك أو يتطلب متطلبات محددة، قد تحتاج إلى استخدام أنواع فهرس مخصصة مثل GIST وGIN وBRIN وما إلى ذلك (https://www.postgresql.org/docs/current/indexes-types.html). لا يدعم Doctrine إنشاء أنواع فهرس خاصة بقاعدة البيانات جاهزة للاستخدام (المرجع).

لمعالجة هذه المشكلة، يمكنك إما تنفيذ CREATE INDEX DDL مباشرة إلى قاعدة البيانات أو كتابة DDL في ملف هجرة العقيدة. يمنحك الخيار الأخير ميزة سهولة نشر التغييرات أو التراجع عنها.

بغض النظر عن الطريقة التي تستخدمها لإنشاء فهرس مخصص، ستضع Doctrine دائمًا علامة على هذه الفهارس المخصصة على أنها فهارس غير معينة، وبالتالي إذا قمت بتنفيذعقيدة:مخطط:تحقق من الصحة، فستحصل على خطأ يفيد بأنه إذا لم تكن قاعدة البيانات الخاصة بك متزامنة، فإن نفس الشيء أثناء تنفيذعقيدة:مخطط:تحديث --dump-sql أوعقيدة:migrations:diff سوف تظهر لك عبارة DROP INDEX... لإزالة الفهارس المخصصة.

حل

أنا أستخدم إصدارات الحزمة هذه. (أعتقد أن الحل سيعمل على نفس الإصدار الرئيسي من الحزم):

    العقيدة/dbal 4.0.4
  • العقيدة/حزمة العقيدة 2.12.0
لقد وجدت العديد من البرامج التعليمية للتعامل مع هذا الأمر ولكنها غير مرضية:

    https://www.liip.ch/en/blog/doctrine-and-generated-columns لم يعد هذا يعمل بعد الآن حيث قام Doctrine DBAL بإزالة مدير الأحداث في DBAL 4. (المرجع)
  • https://medium.com/yousign-engineering-product/ignore-custom-indexes-on-doctrine-dbal-b5131dd22071 كان هذا يظهر رسالة إهمال تم إهمال مفتاح التكوين "platform_service" منذ الإصدار 2.9 من حزمة العقيدة. لن يدعم DBAL 4 إعداد نظام أساسي مخصص عبر معلمات الاتصال بعد الآن. (المرجع)
لقد وجدت مشكلة GitHub حول استبدال تكوين Platform_service هنا https://github.com/doctrine/DoctrineBundle/issues/1656.

لقد أعطتني قراءة هاتين الصفحتين جميع المعلومات حول كيفية استخدام منصة DBAL مخصصة من خلال البرمجيات الوسيطة Doctrine:

    https://github.com/doctrine/dbal/pull/5699
  • https://symfony.com/bundles/DoctrineBundle/current/middlewares.html
أخيرًا، بعد البحث في الكود المصدري، وجدت الحل. تحتاج إلى إنشاء 4 ملفات، ملفان يتعلقان بالبرمجيات الوسيطة Doctrine وملفان آخران يتعلقان بمنصة Doctrine DBAL ومخططها.

تعديل مساحة الاسم واسم الفئة حسب احتياجاتك.

صحيح، 'index_name_2' => صحيح، ]; #[\تجاوز] الوظيفة المحمية _getPortableTableIndexesList (صفيف $tableIndexes، سلسلة $tableName): صفيف { $indexes =parent::_getPortableTableIndexesList($tableIndexes, $tableName); foreach (array_keys(فهارس $) كـ $indexName) { إذا (isset(self::IGNORED_INDEXES[$indexName])) { unset($indexes[$indexName]); } } إرجاع الفهارس $؛ } }
 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/indragunawan/ignore-custom-indexes-on-doctrine-dbal-4-387j?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3