تعطيل الفهرس التلقائي على معرف الكائن ذي الصلة من YML

StackOverflow https://stackoverflow.com/questions/4614031

سؤال

تقوم العقيدة تلقائيًا بإنشاء فهارس على الأعمدة المستخدمة لتحديد علاقات الكائنات ،

علي سبيل المثال

المستخدم: معرف ، الاسم

الرسالة: ID ، sender_id ، receiver_id ، رسالة

إذا قمت بتحديد العلاقة بين الرسالة والمستخدم بطريقة تحتوي هذه الرسالة على مرسل واحد ولديها جهاز استقبال واحد ، فسيقوم العقيدة تلقائيًا بفهرسة الحقول Sender_id و Receiver_id عندما أقوم بإنشاء SQL من النموذج. أرغب في تعطيل الفهرس على المرسل ، لأنني أقوم بإنشاء فهرس يدويًا مع Sender_id ومعرف المتلقي معًا. كيف يمكنني تعطيل الفهرس الذي تم إنشاؤه التلقائي؟

هل كانت مفيدة؟

المحلول

مرحبًا ، افترضت أنك كنت تستخدم MySQL ، وألقيت نظرة في العقيدة/التصدير/mysql.php وجدت هذا:

// build indexes for all foreign key fields (needed in MySQL!!)
if (isset($options['foreignKeys'])) {
      foreach ($options['foreignKeys'] as $fk) {
          $local = $fk['local'];
          $found = false;
          if (isset($options['indexes'])) {
             foreach ($options['indexes'] as $definition) {
                 if (is_string($definition['fields'])) {
                     // Check if index already exists on the column                            
                   $found = $found || ($local == $definition['fields']);    
                 } else if (in_array($local, $definition['fields']) && count($definition['fields']) === 1) {
                    // Index already exists on the column
                    $found = true;
                 }   
            }   
        }   
        if (isset($options['primary']) && !empty($options['primary']) &&
                in_array($local, $options['primary'])) {
             // field is part of the PK and therefore already indexed
             $found = true;
        }   

        if ( ! $found) {
            if (is_array($local)) {
             foreach($local as $localidx) {
                 $options['indexes'][$localidx] = array('fields' => array($localidx => array()));
             }   
        } else {
              $options['indexes'][$local] = array('fields' => array($local => array()));    
             }   
         }   
     }   
 }   

إذا فهمت بشكل صحيح ، فإن تعطيل الفهرس يجب أن يكون جزءًا من المفتاح الأساسي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top