Codeigniter - Error con metodo en el modelo

 
Vista:
Imágen de perfil de Ryuuzaki
Val: 1
Ha mantenido su posición en Codeigniter (en relación al último mes)
Gráfica de Codeigniter

Error con metodo en el modelo

Publicado por Ryuuzaki (1 intervención) el 16/09/2019 15:25:33
Bueno saludos a todos:

tengo un metodo en el controlador llamado getTables() este a su vez llama a un metodo en el modelo de esta forma
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
Clase Controladora --- class Migracion extends CI_Controller
$this->load->model('migracionmodel');
$resultACC = $this->migracionmodel->obtener_tablas_access();
 
public function getTables()
    {
 
        $resultACC = $this->migracionmodel->conectarAccess($this->dataACC);
        $resultPSQL = $this->migracionmodel->conectarPSQL($this->dataPSQL);
        if ($resultACC == 'okp' && $resultPSQL == 'okp') {
            $resultACC = $this->migracionmodel->obtener_tablas_access();
            //$resultPSQL = $this->migracionmodel->obtener_tablas_postgres($this->dataPSQL['esqPost']);
            echo json_encode(
                array(
                    'success' => true,
                    'resultACC_tablas' => $resultACC[0],
                    'resultACC_columnas' => $resultACC[1],
                    'resultPSQL_tablas' => $resultPSQL[0],
                    'resultPSQL_columnas' => $resultPSQL[1]
                ));
 
        } else
            echo json_encode(array(
                    'success' => false,
                    'result' => 'Conexiones-> Access: ' . $resultACC . ', PostgreSQL: ' . $resultPSQL)
            );
        die();
    }
 
Clase Modelo --- class Migracionmodel extends CI_Model
 
public function obtener_tablas_access()
    {
        try {
            $this->conACC->from('MSysObjects');
            $this->conACC->where('Type', 1);
            $query = $this->conACC->get();
            $res_tablas = array();
            //Accediendo a cada una de las tablas
            while ($r_aux = $query->_fetch_object()) {
                //Eliminando tablas por defecto del mdb
                if ((strpos($r_aux->Name, 'MSys') !== false) &&
                    (strpos($r_aux->Name, '~') === false)) continue;
                $res_tablas[] = array('nom_tabla' => $r_aux->Name);
            }
            $res_columnas = array();
            foreach ($res_tablas as $t) {
                $this->conACC->from($t['nom_tabla']);
                $query1 = $this->conACC->get();
                $list_aux = $query1->list_fields();
                foreach ($list_aux as $l) {
                    $res_columnas[$t['nom_tabla']][] = array('nom_columnas' => $l);
                }
            }
            //return array(array($query->_fetch_object()),0);
            return array($res_tablas, $res_columnas);
        } catch (Exception $e) {
            log_message("error", $e->getMessage());
            return show_error($e->getMessage());
        }
    }


Cuando trato de devolver los dos array no da error en el servidor pero en el cliente muesta
ext-base.js:116 POST http://localhost/proyecto/index.php/migracion/getTables net::ERR_EMPTY_RESPONSE

Nota: Cuando debugueo y pongo puntos de ruptura en el return, durante la ejecucion del metodo se llega al punto de ruptura varias veces sin haber llamado desde el controlador a dicho metodo y luego me pone
Waiting for incoming connection with ide key '17844'
y termina la ejecucion dando el error del cliente en el navegador

GRACIAS DE ANTEMANO POR SU TIEMPO Y AYUDA
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Problema al devolver dos arrays desde el controlador a la vista

Publicado por Alejandro (44 intervenciones) el 02/09/2023 00:00:29
El problema que estás enfrentando al intentar devolver dos arrays desde el controlador a la vista parece estar relacionado con la forma en que estás manejando la respuesta JSON y la interacción con la vista. Aquí está la solución:

1. Estructura de datos a devolver:
- Para asegurarte de que los datos se devuelvan correctamente desde el controlador, asegúrate de que estén organizados correctamente. Puedes preparar un array asociativo que contenga las dos matrices que deseas devolver, por ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
$data = array(
    'success' => true,
    'resultACC' => array(
        'tablas' => $resultACC[0],
        'columnas' => $resultACC[1]
    ),
    'resultPSQL' => array(
        'tablas' => $resultPSQL[0],
        'columnas' => $resultPSQL[1]
    )
);
echo json_encode($data);

De esta manera, los datos se estructuran de manera más clara y organizada para su procesamiento en la vista.

2. Manejo de la respuesta en la vista:
- Asegúrate de que en la vista estés manejando correctamente la respuesta JSON. En JavaScript, puedes hacerlo de la siguiente manera:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$.ajax({
    url: 'url_del_controlador/getTables',
    type: 'POST',
    dataType: 'json',
    success: function(response) {
        if (response.success) {
            var resultACC_tablas = response.resultACC.tablas;
            var resultACC_columnas = response.resultACC.columnas;
            var resultPSQL_tablas = response.resultPSQL.tablas;
            var resultPSQL_columnas = response.resultPSQL.columnas;
 
            // Haz lo que necesites con los datos en la vista
        } else {
            console.error('Error en las conexiones:', response.result);
        }
    },
    error: function(xhr, status, error) {
        console.error('Error de solicitud AJAX:', error);
    }
});

Asegúrate de que estás accediendo a los datos correctamente utilizando la estructura proporcionada en la respuesta JSON.

3. Liberación de recursos y controladores:
- Asegúrate de que no estás generando conflictos de nombres entre los controladores y las funciones. El mensaje "Waiting for incoming connection with ide key" a menudo se asocia con problemas de depuración o configuración en el entorno de desarrollo.

Siguiendo estos pasos, deberías poder devolver y procesar correctamente los dos arrays desde el controlador a la vista sin errores de respuesta vacía. Asegúrate también de que no haya conflictos de nombres o problemas de depuración en tu entorno de desarrollo que puedan estar causando el mensaje "Waiting for incoming connection with ide key".
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar