Отключить автоматический индекс по идентификатору связанного объекта из yml - PullRequest
0 голосов
/ 06 января 2011

Doctrine Автоматически создает индексы для столбцов, которые используются для определения отношений объектов,

Например

пользователь: id, имя

сообщение: идентификатор, идентификатор отправителя, идентификатор получателя, сообщение

если я определю отношения между сообщением и пользователем таким образом, чтобы сообщение имело одного отправителя и одного получателя, доктрина автоматически индексирует поля sender_id и receive_id, когда я генерирую sql из модели. Я хотел бы отключить индекс для отправителя, потому что я вручную создаю индекс с sender_id и идентификатором получателя вместе. Как я могу отключить автоматически сгенерированный индекс?

1 Ответ

1 голос
/ 09 января 2011

Здравствуйте, я предположил, что вы используете MySQL, и посмотрел в Doctrine / Export / 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()));    
             }   
         }   
     }   
 }   

Если я правильно понимаю, отключение индекса должно быть частьюпервичный ключ.

...