function __construct($tabla_padre, $tabla_padre_clave, $tabla_padre_id, $tabla_hijo, $tabla_hijo_clave, $tabla_hijo_id)
 {
     toba_asercion::arrays_igual_largo($tabla_padre_clave, $tabla_hijo_clave);
     $this->tabla_padre = $tabla_padre;
     $this->tabla_padre_claves = $tabla_padre_clave;
     $this->tabla_padre_id = $tabla_padre_id;
     $this->tabla_hijo = $tabla_hijo;
     $this->tabla_hijo_claves = $tabla_hijo_clave;
     $this->tabla_hijo_id = $tabla_hijo_id;
     //Notifico la existencia de la relacion a las tablas
     $this->tabla_padre->agregar_relacion_con_hijo($this, $this->tabla_hijo_id);
     $this->tabla_hijo->agregar_relacion_con_padre($this, $this->tabla_padre_id);
     $this->mapear_campos();
 }
示例#2
0
 /**
  * Carga el datos_tabla asociado CON clausulas WHERE y FROM especificas, el entorno no incide en ellas
  * @param array $where Clasulas que seran concatenadas con un AND
  * @param array $from Tablas extra que participan (la actual se incluye automaticamente)
  * @param boolean $anexar_datos Si es false borra todos los datos actuales de la tabla, sino los mantiene y adjunto los nuevos
  * @param boolean $usar_cursores En caso de anexar datos, fuerza a que los padres de la fila sean los cursores actuales de las tablas padre
  * @return boolean Falso si no se encontro ningún registro
  */
 function cargar_con_where_from_especifico($where = null, $from = null, $anexar_datos = false, $usar_cursores = false)
 {
     toba_asercion::es_array_o_null($where, "AP [{$this->_tabla}] El WHERE debe ser un array");
     toba_asercion::es_array_o_null($from, "AP [{$this->_tabla}] El FROM debe ser un array");
     $sql = $this->generar_sql_select($where, $from);
     return $this->cargar_con_sql($sql, $anexar_datos, $usar_cursores);
 }
示例#3
0
 /**
  * Se cargan las tablas de la relación restringiendo por las claves de las tablas raiz
  * @param array $clave Asociativo campo=>valor correspondientes a campos de la(s) tabla(s) raiz
  * @return boolean Verdadero si al menos se carga una tabla
  */
 function cargar_por_clave($clave)
 {
     toba_asercion::es_array($clave, "Error cargando la relación, se esperaba un arreglo asociativo por ejemplo " . "<pre>\$relacion->cargar(array('campo'=> 'valor'))</pre>", true);
     $this->objeto_relacion->resetear();
     $tablas_raiz = $this->objeto_relacion->get_tablas_raiz();
     toba_asercion::es_array($tablas_raiz, "Error cargando la relación, se esperaba un arreglo con las tablas raiz de la relacion.", true);
     $tablas = $this->objeto_relacion->orden_carga();
     $ok = false;
     foreach ($tablas as $id_tabla => $tabla) {
         if (in_array($id_tabla, $tablas_raiz)) {
             //Si es una tabla raiz se le restringue por los campos pasados
             $res = $tabla->persistidor()->cargar_por_clave($clave);
         } else {
             //Sino se hace una carga común (en base a las cargas de los padres)
             $res = $tabla->persistidor()->cargar_por_clave(array());
         }
         $ok = $ok || $res;
     }
     $this->objeto_relacion->set_cargado($ok);
     return $ok;
 }
示例#4
0
文件: toba_ci.php 项目: emma5021/toba
 /**
  * Carga las dependencias y las inicializa
  * @param unknown_type $dependencias
  * @ignore 
  */
 protected function inicializar_dependencias($dependencias)
 {
     toba_asercion::es_array($dependencias, "[Inicializar_dependencias] No se definio la lista de dependencias a inicializar");
     $this->_log->debug($this->get_txt() . "[ inicializar_dependencias ]\n" . var_export($dependencias, true), 'toba');
     //Parametros a generales
     $parametro["nombre_formulario"] = $this->_nombre_formulario;
     foreach ($dependencias as $dep) {
         if (isset($this->_dependencias[$dep])) {
             //La dependencia ya se encuentra cargada
             continue;
         }
         //-[0]- Creo la dependencia
         $this->cargar_dependencia($dep);
         //-[1]- La inicializo
         $parametro['id'] = $dep;
         $this->inicializar_dependencia($dep, $parametro);
     }
 }
示例#5
0
 /**
  * Procesa los cambios masivos de filas
  * 
  * El id de la fila se asume que la key del registro o la columna apex_datos_clave_fila
  * Para procesar es necesario indicar el estado de cada fila utilizando una columna referenciada con la constante 'apex_ei_analisis_fila' los valores pueden ser:
  *  - 'A': Alta
  *  - 'B': Baja
  *  - 'M': Modificacion
  *
  * @param array $filas Filas en formato RecordSet, cada registro debe contener un valor para la constante apex_ei_analisis_fila
  * @param mixed $ids_padres Asociativo padre =>id de las filas padres de esta nueva fila, 
  * 						  en caso de que no se brinde, se utilizan los cursores actuales en estas tablas padres
  */
 function procesar_filas($filas, $ids_padres = null)
 {
     toba_asercion::es_array($filas, "toba_datos_tabla - El parametro no es un array.");
     //--- Controlo estructura
     foreach (array_keys($filas) as $id) {
         if (!isset($filas[$id][apex_ei_analisis_fila])) {
             throw new toba_error_def("Para procesar un conjunto de registros es necesario indicar el estado " . "de cada uno utilizando una columna referenciada con la constante 'apex_ei_analisis_fila'.\n\t\t\t\t\t\t\t\t\tSi los datos provienen de un ML, active la opción de analizar filas.");
         }
     }
     //--- Se asume que el id de la fila es la key del registro o la columna apex_datos_clave_fila.
     foreach ($filas as $id => $fila) {
         $id_explicito = false;
         if (isset($fila[apex_datos_clave_fila])) {
             $id = $fila[apex_datos_clave_fila];
             $id_explicito = true;
         }
         $accion = $fila[apex_ei_analisis_fila];
         unset($fila[apex_ei_analisis_fila]);
         switch ($accion) {
             case "A":
                 //--- Si el ML notifico explicitamente el id, este es el id de la nueva fila, sino usa el mecanismo interno
                 $nuevo_id = $id_explicito ? $id : null;
                 $this->nueva_fila($fila, $ids_padres, $nuevo_id);
                 break;
             case "B":
                 $this->eliminar_fila($id);
                 break;
             case "M":
                 $this->modificar_fila($id, $fila);
                 break;
         }
     }
 }