开发者

Disable automatic index on related object id from yml

开发者 https://www.devze.com 2023-02-03 07:38 出处:网络
Doctrine Automatically creates indexes on colum开发者_StackOverflow社区ns that are used to define object relations,

Doctrine Automatically creates indexes on colum开发者_StackOverflow社区ns that are used to define object relations,

For example

user: id, name

message: id, sender_id, receiver_id, message

if I define relationship between message and user in a way that message has one Sender and has one Receiver, doctrine will automatically index sender_id and receiver_id fields when I generate sql from model. I would like to disable index on sender, because I manually create index with sender_id and receiver id together. How can I disable auto generated index?


Hello I assumed you were using MySQL, and took a look in Doctrine/Export/Mysql.php I found this :

// 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()));    
             }   
         }   
     }   
 }   

If I understand correctly, to disable the index should be part of the primary key.

0

精彩评论

暂无评论...
验证码 换一张
取 消