PHP - ¿Como obtener registro desde postgresql, con campos INT, Character y JSON?

 
Vista:
Imágen de perfil de John
Val: 81
Ha disminuido su posición en 4 puestos en PHP (en relación al último mes)
Gráfica de PHP

¿Como obtener registro desde postgresql, con campos INT, Character y JSON?

Publicado por John (33 intervenciones) el 18/11/2019 19:49:58
Hola amigos, tengo una tabla en mi BD postgres donde tengo varios tipos de campos, entre ellos, campos JSON, esto será un poco largo, pero es para intentar explicarme lo mejor posible

1
2
3
4
5
6
7
8
9
10
CREATE TABLE public.movimientos_trabajador
(
    id_movimiento integer NOT NULL DEFAULT nextval('movimientos_trabajador_id_movimiento_seq'::regclass),
    old_data json,
    new_data json,
    id_usuario integer,
    fecha date,
    id_tipo integer,
    CONSTRAINT movimientos_trabajador_pkey PRIMARY KEY (id_movimiento)
);

bien utilizando PDO, nunca he tenido problemas para mostrar los datos empleando AJAX, con algo más o menos así:

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
62
63
64
65
66
67
68
69
<?php
 
// Modelo
 
class ajaxModel extends mainModel{
 
    protected function zoom_move_model($id){
 
        $conexion = parent::conectar();
 
        $sql = "SELECT id_movimiento, nombre, fecha FROM movimientos_trabajador mt
        INNER JOIN users u ON (mt.id_usuario = u.id_user)
        WHERE id_movimiento = :id";
 
        $result = $conexion->prepare($sql);
 
        $result->bindValue(":id", $id, PDO::PARAM_INT);
 
        $result->execute();
 
        $datos = $result->fetch();
 
        return $datos;
 
    }
 
}
 
// Controlador
 
class ajaxController extends ajaxModel{
 
    // Zoom movimiento
    public function zoom_move_controller($id){
 
        $datos = parent::zoom_move_model($id);
 
        return json_encode( $datos );
 
    }
 
}
 
// Zoom movimiento
if(isset($_GET['zoom_move'])){
 
    $class = new ajaxController();
    $datos = $class->zoom_move_controller($_GET['zoom_move']);
    echo $datos;
 
}
 
?>
 
// Javascript
function zoom_mov(id){
 
	$.get("../controllers/ajaxController.php", { zoom_move : id }, function (r){
 
		r = JSON.parse(r);
		console.log(r);
 
		document.getElementById("nromove").innerHTML = `N° de movimiento ${r[0]}`;
		document.getElementById("m_user").innerHTML = r[1];
		document.getElementById("m_date_user_move").innerHTML = r[2];
 
	});
 
}

Esto me da los resultados que necesito sin ningún tipo de problema.
en la consola el resultado es este:
1
{0: 8, 1: "administrador", 2: "2019-11-15", id_movimiento: 8, nombre: "administrador", fecha: "2019-11-15"}

Ahora mi problema surge cuando intento llamar uno de los campos JSON

1
2
3
$sql = "SELECT id_movimiento, nombre, fecha, old_data FROM movimientos_trabajador mt
        INNER JOIN users u ON (mt.id_usuario = u.id_user)
        WHERE id_movimiento = :id";

obteniedo por consola un objeto dentro de otro objeto como se observa en el indice N° 3:
1
{0: 8, 1: "administrador", 2: "2019-11-15", 3: "{"id_trabajador":22304,"0":22304,"id_personal":266…nto":null,"9":null,"fecha_egreso":null,"10":null}", id_movimiento: 8, nombre: "administrador", fecha: "2019-11-15", old_data: "{"id_trabajador":22304,"0":22304,"id_personal":266…nto":null,"9":null,"fecha_egreso":null,"10":null}"}

Entonces finalmente la pregunta es:
¿Es correcto hacer esto así como lo tengo?
¿Como puedo acceder a los valores del indice N°3 ?, si hago algo como esto me da undefined,
1
console.log(r[3].id_trabajador); //Undefined 

imagino que tengo un choque entre lo que es el json_encode() del controlador, porque el campo que estoy llamando ya viene en formato JSON, pero no se como gestionar esta situación, por favor ayudenme
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