コード例 #1
0
ファイル: core.db.DAL.class.php プロジェクト: fkali/yupp
 /**
  * Se recibe un objecto a la que ya se ha verificado que debe insertarse en la base de datos.
  * @param $object POs a salvar.
  */
 private function insert_query($object, $tableName = NULL)
 {
     Logger::getInstance()->dal_log("DAL:insert_query " . __FILE__ . " " . __LINE__);
     // INSERT INTO hello_world_persona ( nombre ,edad ,class ,id ,deleted ) VALUES ('pepe' ,'12' ,'Persona' ,'6' ,'' );
     if (!$tableName) {
         $tableName = YuppConventions::tableName($object);
     }
     $q = "INSERT INTO " . $tableName . " ( ";
     // DBSTD
     $attrs = $object->getAttributeTypes();
     // Recorro todos los atributos simples...
     $tableAttrs = "";
     foreach ($attrs as $attr => $type) {
         $tableAttrs .= DatabaseNormalization::col($attr) . " ,";
         // DBSTD
     }
     $tableAttrs = substr($tableAttrs, 0, sizeof($tableAttrs) - 2);
     $q .= $tableAttrs;
     $q .= ") VALUES (";
     // El codigo es distinto al de update porque la forma de la consulta es distinta.
     // TODO: Si el valor es null tengo que poner null en la tabla, no el string vacio.
     // TODO: Verificar atributos no nullables en null en la instancia de la clase, esto falta agregar cosas a la clase persistente, "las restricciones"
     $tableVals = "";
     foreach ($attrs as $attr => $type) {
         $value = $object->aGet($attr);
         // Valor del atributo simple.
         if ($value === NULL) {
             $tableVals .= "NULL ,";
         } else {
             if (is_string($value)) {
                 $tableVals .= "'" . addslashes($value) . "' ,";
             } else {
                 if (is_bool($value)) {
                     $tableVals .= "'" . ($value === true ? "1" : "0") . "' ,";
                 } else {
                     $tableVals .= "'" . $value . "' ,";
                 }
             }
         }
         // FIXME: OJO, si no es literal no deberia poner comillas !!!!  y si es null deberia guardar null
         //echo $attr . " tiene tipo: " . gettype($value) . " y valor '" . $value . "'<br/>";
     }
     $tableVals = substr($tableVals, 0, sizeof($tableVals) - 2);
     $q .= $tableVals;
     $q .= ");";
     // Si hay una excepcion, llega hasta la capa superior.
     $this->db->execute($q);
 }
コード例 #2
0
 public function aGet($attr)
 {
     //Logger::getInstance()->po_log("PO:aGet $attr");
     // Si no es un atributo simple tengo que ver si hago lazy load...
     if (!array_key_exists($attr, $this->attributeTypes)) {
         // Si llega aqui estoy seguro de que no pide un atributo simple, se pide uno complejo.
         // Podria ser simple pero se paso un nombre normalizado para una columna.
         // Si el rol tiene el nombre de la assoc declarado, necesito ver cual es el nombre
         // completo de la key en hasOne o hasMany porque usa attribute__assocName.
         $attr = $this->getRoleWithAssocName($attr);
         // Soporte para lazy loading para hasOne y hasMany
         // No verifico que tenga valor porque deberia venir inicializado
         //if ( isset($this->attributeValues[$attr]) && $this->attributeValues[$attr] === self::NOT_LOADED_ASSOC )
         if ($this->attributeValues[$attr] === self::NOT_LOADED_ASSOC) {
             // Si no tiene ID todavia no se guardo, entonces no puede cargar lazy algo que no se ha guardado.
             if (!isset($this->attributeValues['id'])) {
                 return NULL;
             }
             $pm = PersistentManager::getInstance();
             if (array_key_exists($attr, $this->hasMany)) {
                 $pm->get_many_assoc_lazy($this, $attr);
                 // El atributo se carga, no tengo que setearlo...
                 // Se marca el dirtyMany al pedir hasMany porque no se tiene control
                 // sobre como se van a modificar las instancias de la relacion solicitadas,
                 // si dirtyMany esta en false y las intancias son modificadas, al salvar esta
                 // intancia, las hasMany no se van a salvar en cascada.
                 $this->dirtyMany = true;
             } else {
                 if (array_key_exists($attr, $this->hasOne)) {
                     // Si hay id de asociacion, lo cargo, si no lo pongo en NULL
                     $assocAttr = DatabaseNormalization::simpleAssoc($attr);
                     // email_id
                     $assocId = $this->attributeValues[$assocAttr];
                     if ($assocId != NULL) {
                         $this->attributeValues[$attr] = $pm->get_object($this->hasOne[$attr], $assocId);
                         // Se marca el dirtyOne al pedir hasOne porque no se tiene control sobre como se va a modificar la instancia solicitada.
                         $this->dirtyOne = true;
                     } else {
                         $this->attributeValues[$attr] = NULL;
                     }
                 } else {
                     // Aun puede ser simple porque se pide por el nombre de la columna en lugar del nombre del atributo,
                     // entonces primero hay que buscar si no se pide por el nombre de la columna. Idem a lo que hago en aSet.
                     foreach ($this->attributeTypes as $classAttr => $type) {
                         if (DatabaseNormalization::col($classAttr) == $attr) {
                             if (isset($this->attributeValues[$classAttr])) {
                                 return $this->attributeValues[$classAttr];
                             } else {
                                 return NULL;
                             }
                         }
                     }
                     throw new Exception("El atributo " . $attr . " no existe en la clase (" . get_class($this) . ")");
                 }
             }
         }
         // si no esta cargada
     }
     // si no es simple
     // Devuelve atributo hasOne o hasMany (la devolucion de atributos simples se hace arriba).
     // Si el hasOne o hasMany no estaban cargados, fueron cargados bajo demanda y devueltos aqui.
     if (isset($this->attributeValues[$attr])) {
         return $this->attributeValues[$attr];
     }
     return NULL;
 }