Doctrine con columnas en mayúsculas

Por defecto el ORM Doctrine 1.4 no soporta columnas de base de datos en mayúsculas, porque algunas de las bases de datos soportadas tampoco las aceptan. Pero si te encuentras con una base de datos legacy MySQL que ya las tiene y que no se puede cambiar, es muy fácil modificar el código de la clase Doctrine_Table para que no se queje. A continuación el diff de cambios.

--- Doctrine_before/Table.php	2010-08-31 13:09:56.574622052 +0200
+++ Doctrine_after/Table.php	2010-08-31 13:09:40.933372114 +0200
@@ -1168,7 +1168,7 @@
             return $this->_columnNames[$fieldName];
         }
 
-        return strtolower($fieldName);
+        return $fieldName;
     }
 
     /**
@@ -1195,8 +1195,10 @@
      */
     public function getFieldName($columnName)
     {
-        if (isset($this->_fieldNames[$columnName])) {
-            return $this->_fieldNames[$columnName];
+        foreach($this->_fieldNames as $k=>$v){
+            if(strtolower($k)==strtolower($columnName)){
+                return $v;
+            }
         }
         return $columnName;
     }
@@ -1316,10 +1318,9 @@
             } else {
                 $fieldName = $parts[0];
             }
-            $name = strtolower($parts[0]);
+            $name = $parts[0];
         } else {
             $fieldName = $name;
-            $name = strtolower($name);
         }
 
         $name = trim($name);
@@ -1462,7 +1463,12 @@
      */
     public function hasColumn($columnName)
     {
-        return isset($this->_columns[strtolower($columnName)]);
+        foreach($this->_columns as $k=>$v){
+            if(strtolower($k)==strtolower($columnName)){
+                return true;
+            }
+        }
+        return false;
     }
 
     /**

La clave es getFieldName que acepte $columName en mayúsculas y en minúsculas porque a veces se pasa de una forma y a veces de otra.

Comentarios

  • comentario de Laura el 2 de septiembre de 2010 a las 11:09

    Hola, oye y si se trabaja con postgres y ademas de las columnas, tambien hay campos con mayusculas que se puede hacer?? ademas estoy trabajando con symfony

    • comentario de zero el 3 de septiembre de 2010 a las 06:09

      Mmm, no sé si te refieres a campos de doctrine, los campos ya pueden estar en mayúsculas. En teoría con postgres también tendría que funcionar.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

*

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">