/** * Nombre de la tabla que almacena una instancia de un objeto persistente. * Si tiene "withTable", elige ese, si no, toma el nombre de la clase normalizado como nombre de la tabla. * @param PersistentObject $ins Instancia de la cual derivar el nombre de la tabla en la base de datos. */ public static function tableName($instance_or_class) { $ins = $instance_or_class; // TEST if (empty($instance_or_class)) { debug_print_backtrace(); } //echo '<pre> tableName '. print_r($instance_or_class, true) .__FILE__.__LINE__.'</pre>'; if (!is_object($ins)) { $ins = new $instance_or_class(array(), true); } // Si no es instancia, es clase, creo una instancia de esa clase. if (!$ins instanceof PersistentObject) { throw new Exception("La instancia debe ser de PO y es " . gettype($ins)); } // FIXME: en pila de lados tengo que crear una instancia para poder llamar a este metodo, // porque no mejor hacer que pueda recibir tambien el nombre de la clase, y en ese caso, // resuelve la tabla como nombre de clase, sin considerar withTable, o directamente crea // la instancia internamente. Permitiendo tambien pasarle una instancia, o sea, ambas opciones. // FIXME: SI NO TIENE WIHT TABLE TENGO QUE VER POR EL NOMBRE DE LA CLASE, PERO ME VIENE PersistentObject, // TENGO CAPAZ QUE SETEARLE EL WITH TABLE A MANO SI NO LO TIENE SETEADO!! NOOOOO!!! // Si no tiene withTable, tengo que crear el nombre de la tabla a partir del nombre de la clase. // Si no tiene withTable, quiere decir que en ninguna superclase de ella se define, entonces tengo que // obtener la superclase de nivel 1 y el nombre de la tabla se saca de el nombre de esa clase. if ($ins->getWithTable() != NULL && strcmp($ins->getWithTable(), "") != 0) { $tableName = $ins->getWithTable(); } else { $superclaseNivel1 = $ins->getClass(); while (($parent = get_parent_class($superclaseNivel1)) !== 'PersistentObject') { $superclaseNivel1 = $parent; } $tableName = $superclaseNivel1; } // Filtro... $tableName = DatabaseNormalization::table($tableName); // TODO: La funcion de normalizacion esta deberia estar en un core.basic.String. return $tableName; }