Como usar una relacion en un cuadro.

Buenas,
la consulta es porque tengo un cuadro que uso para mostrar datos de una tabla, y a travez de una relacion (tipo Datos-Relacion)
cree la relacion entra la tabla padre-hijos, tipica relacion uno a muchos.

Ahora bien, en mi cuadro quiero mostrar datos de ambas tablas, como la descripcion y no el codigo, (persona - Estado Civil) por ejemplo.

No logre hacerlo desde la configuracion de columnas …

La unica manera fue modificando la consulta que me genero un asistente, en el objeto tabla que creo dentro de “datos”, tocando el sql a mano puedo lograr lo que necesito, pero hay otra manera ? para que defino la relacion si luego no se carga al momento de levantar los datos para el cuadro?

Desde ya muchas gracias
Saludos

Para la tabla principal se muestran las descripciones, cargandolas desde el sql que carga el cuadro, para las demas tablas que le siguen, se utilizan en el datos tabla el concepto de VARIABLES EXTERNAS, es allí donde se cargan dichas descripciones.

Saludos

Disculpa jorozco pero no me funciono.
en el CI tengo este codigo:


06      function conf__cuadro(toba_ei_cuadro $cuadro)
07      {
08          $cuadro->set_datos($this->dep('datos')->tabla('t_catastros')->get_listado());
09          //$cuadro->set_datos($this->dep('datos')->tabla('t_catastros')->get_filas());
10      }

la funcion de la linea 08 existe en el objeto t_catastro:


04      function get_listado()
05      {
06          $sql = "SELECT
07              t_tc.id,
...               ...
17              t_calle_a.nombre_numero,
18              t_calle_a.nombre,
...
31          FROM
32              t_catastros as t_tc
33          LEFT JOIN t_calles t_calle_a
34                  on t_tc.calle_id = t_calle_a.id    
35          LEFT JOIN t_calles t_calle_esquina
36                  on t_tc.calle_id_esquina = t_calle_esquina.id    
37          ORDER BY circ, secc, chac, quin, fracc, manz, parcela, subparcela";
38          return toba::db('muni_gis')->consultar($sql);
39      }

Como observaras resolvi las FK con LEFT JOINS.

No se como lograr que esta consulta lo haga automaticamente el toba, si es que se puede.

Saludos

Encontre algo mas.

Al definir las tablas en un objeto tipo relacion_tabla dentro del CI, observaba con el debug que hacia las consultas de forma diferente a lo esperado.

La cuestion es que hacia el primer query por la primer tabla en orden Alfabetico, al no tener registros , dada la condicion where en esa tabla, no me traia datos.

trato de explicarme un poco mas.
Tengo un objeto Cuadro , que funciona para seleccionar un linea.
La seleccion me tiene que llevar a una pantalla de “ver Detalle” con 2 tabs, cada tab pertenece a diferentes tablas.

Tengo una tabla t_catastro y una tabla t_calle.
la tabla t_catastro tiene varios campos que usan la FK a t_calle, calle_id, calle_esquina_id.
Con lo cual defini en el objeto relacion 2 entradas, siendo t_calle PADRE y t_catastro, HIJO

Cuando observo como va armando las consultas, veo que primero hace un query por t_calle donde el where es por el id con el valor de la seleccion del cuadro, pero el cuadro es la consulta de t_catastro !!
Despues hace la consulta por t_catastro, pero buscando todos los registrso donde calle_id sea el id de t_calle, pero este subquery de t_calle esta mal, porque selecciona lo registros con id = al id de catastro, el cual no existe.

Lo que hice fue sacar la tabla t_calle de la relacion y empezo a funcionar correctamente !

Espero haber sido claro, sino me consultan.
Todo lo que pueda aportar para mejorar la herramienta, estoy a vtra disposicion.

Saludos

Me pierdo de la idea inicial, que era mostrar descripciones del FK en otros cuadros.
Como lo trabajo es que los datos de la tabla principal, los muestro en la pantalla de Edición, y así esta descripción puede navegar por todos los TABs;

EL proceso es como sigue:

  1. se crea el ci_navegacon y ci_edicion y el datos relación
  2. en el cuadro de selección en PROPIEDADES BASICAS, CLAVE COLUMNA, se escribe la PK de la tabla principal, en los cuadros de la pantalla de selección, no se escriben las claves, solamente se tilda la propiedad Clave - datos_tabla
  3. en el datos relación, se arma con las tabla implicadas PADRE e Hijos y en el TABs Relaciones, al lado izquierdo siempre va la tabla padre, a la derecha la tabla hija y por cada fila, asociamos las columnas padre e hijos que la asocian, ejm id_pais (padre) con ciudad_id_pais (hijo), no incluir otras columnas diferentes a la del padre, porque ese puede generar el mal comportamiento que dices.

Adjunto imagen


Continuando con las imagenes

Espero te sirva


El tema es asi Ricardo, en gral los cuadros de las operaciones elegimos cargarlos directamente desde una SQL, en lugar de usar los objetos de persistencia. El por que?

  • Los objetos de persistencia (datos_relacion, datos_tabla) fueron creados pensando en un uso de edicion, por tanto mantienen estructuras internas que permiten llevar adelante las operaciones. Usarlos para mostrar datos es generar un overhead innecesario en el web server.

  • Es mucho mas eficiente resolver en una SQL las fk a otras tablas que hacerlo mediante columnas externas, simplemente porque el volumen de datos en un cuadro inicial suele ser importante y el objeto de persistencia hara una consulta por cada columna externa que tengas.

  • Los objetos de persistencia los usas para enmascarar ABM’s y no tener que hacer las SQL manualmente en cada caso, ademas de poder hacer transparente el manejo de la sesion en operaciones transaccionales que necesitan mas de un pedido de pagina.

Como te decia, dichos objetos fueron pensados para edicion, si queres los podes usar para mostrar datos… pero no van a ser eficientes y ademas vas a tener que trabajar de mas para lograr lo que queres.

Al definir las tablas en un objeto tipo relacion_tabla dentro del CI, observaba con el debug que hacia las consultas de forma diferente a lo esperado.

La cuestion es que hacia el primer query por la primer tabla en orden Alfabetico, al no tener registros , dada la condicion where en esa tabla, no me traia datos.

Tengo una tabla t_catastro y una tabla t_calle.
la tabla t_catastro tiene varios campos que usan la FK a t_calle, calle_id, calle_esquina_id.
Con lo cual defini en el objeto relacion 2 entradas, siendo t_calle PADRE y t_catastro, HIJO

Cuando observo como va armando las consultas, veo que primero hace un query por t_calle donde el where es por el id con el valor de la seleccion del cuadro, pero el cuadro es la consulta de t_catastro !!
Despues hace la consulta por t_catastro, pero buscando todos los registrso donde calle_id sea el id de t_calle, pero este subquery de t_calle esta mal, porque selecciona lo registros con id = al id de catastro, el cual no existe.

Lo que hice fue sacar la tabla t_calle de la relacion y empezo a funcionar correctamente !


El problema aparentemente es que tenes la relacion armada al reves, esto es… si el cuadro selecciona de t_catastro… esa tabla nunca puede ser hija, siempre debe ser la raiz del arbol.

Saludos

PD: Jhon… me perdi con lo tuyo jajajajaja… estabas tratando de orientar a Ricardo o es un problema que te surgio?

Nada Richard, lo trataba de orientar con un ejemplo, ya que por mi parte cuando tenemos las gráficas es mas claro, aunque excelente la profundización que haces.

Si, Gracias Richard,
ahora esta mas claro.

O al menos estoy mas seguro de lo que voy haciendo.
Gracias

PD: Seguire molestando :), no se van a olvidar de mi tan facil !

Saludos