MySQL - Transacciones Mysql en app Orientada a Objetos

 
Vista:
sin imagen de perfil
Val: 18
Ha aumentado 1 puesto en MySQL (en relación al último mes)
Gráfica de MySQL

Transacciones Mysql en app Orientada a Objetos

Publicado por Thunder (6 intervenciones) el 22/02/2021 14:55:40
Buenos dias Comunidad.

Gracias por tomarse el tiempo en leerme y responderme.

Estoy haciendo una app web en PHP Orientada a objetos. Tengo clases y en cada clases las fuciones y metodos para insertar, borrar, actualizar la base de datos mysql.

Pero se me da la ocasion en que en un mismo fichero php, tengo que instanciar dos objetos y llamar a métodos distintos de cada uno de ellos. Mi pregunta es la siguiente:
Donde implemento las transacciones? en la misma clase? En ese fichero php donde llamo a las instancias de los objetos? Donde?

Gracias mil
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
sin imagen de perfil

Transacciones Mysql en app Orientada a Objetos

Publicado por anonymous (59 intervenciones) el 22/02/2021 15:03:59
El llamado a los objetos se puede hacer desde cualquier parte del programa, y que deberían estar alojados todos en una capa de Objetos de Negocio.

Las transacciones si deberían estar más protegidas y aisladas, normalmente deben estar en una capa aparte llamada DAO y cada DAO debería tener su interfaz propia (En la interfaz solo se exponen sus métodos no se implementan)

A esas interfaces las debería llamar un controlador que es el que se encarga de enrutar y hacer los llamados según la interacción del usuario con la capa de presentación.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 18
Ha aumentado 1 puesto en MySQL (en relación al último mes)
Gráfica de MySQL

Transacciones Mysql en app Orientada a Objetos

Publicado por Thunder (6 intervenciones) el 22/02/2021 15:14:51
Gracias por la prontitud.

Pero me pudiera poner un ejemplo, ahondando mas sobre las capas esas si no es mucha molestia...

Gracias
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
sin imagen de perfil

Transacciones Mysql en app Orientada a Objetos

Publicado por anonymous (59 intervenciones) el 22/02/2021 15:23:34
En tu proyecto lo que vas a hacer es que vas a crear una serie de carpetas o directorios y separas todo.

Vas a tener una carpeta llamada Modelos o Bussines Object y dentro de ella metes todas las clases.

Tendrías otra llamada Vista o Presentación y en ella metes todos los formularios.

Tendrás otra donde alojarás todos los controladores de cada form y un controller manager que gobernará todo.

Esta separación no es otra cosa que es MVC.

Finalmente tendrás una carpeta llamada DAL (Data Access Lawyer) y en esta almacenarás todo lo que tenga que ver con BD, o sea tu conexión, tus interfaces y DAOS de cada una de la estructuras que definiste en BD.

Puedes guiarte en: https://github.com/JCorreal/ControlMantenimiento_PHP
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 18
Ha aumentado 1 puesto en MySQL (en relación al último mes)
Gráfica de MySQL

Transacciones Mysql en app Orientada a Objetos

Publicado por Thunder (6 intervenciones) el 22/02/2021 19:40:29
Muchisimas Gracias.

Ya voy entendiendo mejor la cuestion. Solo un pequeño detalle, cuando usted dice esto: y un controller manager que gobernará todo, dilapideme esto para entenderlo mejor en la práctica.

No obstante, gracias mil!!!
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
sin imagen de perfil

Transacciones Mysql en app Orientada a Objetos

Publicado por anonymous (59 intervenciones) el 22/02/2021 23:19:45
Te envié un correo interno más explicito, porque el tema es muy amplio.

Pero básicamente son decisiones de arquitectura de SW, donde se decide que haya un controlador por encima de los demás, que se encargue de otorgar o no permisos de ejecución sobre otros módulos en el sistema, a quienes estén por debajo.
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
sin imagen de perfil
Val: 18
Ha aumentado 1 puesto en MySQL (en relación al último mes)
Gráfica de MySQL

Transacciones Mysql en app Orientada a Objetos

Publicado por Thunder (6 intervenciones) el 23/02/2021 17:15:08
Muy buenos días.

No sabe cuanto agradezco su ayuda y de hecho, estoy aprendiendo un poco mas cada dia. De hecho, descargue el cakephp para aprenderlo a usar, pero mientras tanto, sigo arreglando mi desastre con sus conocimientos.

Mire, cree una carpeta llamada MODELOS, alli metí todas las clases. Otra carpeta Views tengo todos los formularios. en el code, al cambiar su ubicacion, el require_once por supuesto que cambie su ruta.

pero me esta dando este error!!!! ya me tiene loco!!!!!!!

Warning: require_once(Modelos/Empresa.php): Failed to open stream: No such file or directory in C:\laragon\www\factuweb\Views\borrar_empresa.php on line 10

y ese fichero Empresa.php esta alli, y esa línea 10 lo que tiene es esto require_once 'Modelos/Empresa.php';

En espera de su accionar una vez mas colega.

Ah no me ha llegado el correo interno aun.

Saludos nuevamente
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
sin imagen de perfil

Transacciones Mysql en app Orientada a Objetos

Publicado por anonymous (59 intervenciones) el 23/02/2021 17:39:07
Si te entiendo perfectamente, luchar contra los archivos que se tienen que incluir es una pelea de locos, pero para eso está

spl_autoload_register

Pero solo funciona en versiones superiores de PHP 5, ahí en el enlace a github que te envié, dentro de mi carpeta de controladores hay un archivo que se llama: AutoLoader.php

Intenta adaptarlo a tu sistema, verás que una vez lo hagas ya te olvidas del include y el require_once, porque el se encarga de cargar lo que vayas necesitando.

La separación que estás haciendo seguro te traerá enormes beneficios para mantener tu código, es como arreglar un cajón que tiene muchas cosas y simplemente vas agrupando y separando, lo que se traduce en aplicaciones altamente escalables y mantenibles

Si decides no utilizar spl_autoload_register, debes modificar la ruta ../Modelos/Empresa.php o en su defecto la carpeta completa ../Views/Nombredetuvista.php";

Tú estás registrado en lwdp, deberías tener un mensaje en tu buzón, si ingresas con tu clave ahí le verás
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 18
Ha aumentado 1 puesto en MySQL (en relación al último mes)
Gráfica de MySQL

Transacciones Mysql en app Orientada a Objetos

Publicado por Thunder (6 intervenciones) el 25/02/2021 13:53:02
Hola y Buenos días

Bueno ya resolví el tema de las rutas, gracias mil por su ayuda.

Ahoraa, enfrascado con las transacciones, mire lo que hice. Creé una clase que me orqueste una combinacion de querys. Le pasé por parámetros a esa funcion, todas las variables que pueden estar involucradas en el proceso que anteriormente hacía.

Y ahora me da este error:

Fatal error: Uncaught Error: Call to a member function autocommit() on null in C:\laragon\www\factuweb\BLL\facturamodel.php:22 Stack trace: #0 C:\laragon\www\factuweb\Controls\add_factura.php(43): facturamodel->creacionfactura('33333333333', '2021YGM', '2021-02-06', '2021-02-27', 'Probando', '200', 'No', Array, Array) #1 {main} thrown in C:\laragon\www\factuweb\BLL\facturamodel.php on line 22

Me percato que a la funcion esta llegando bien los datos de las variables., pero no se que pasa con ese autocommit.

El codigo de esa clase, no es gran cosa...

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
include_once('../Modelos/Facturas.php');
include_once('../Modelos/Contratos.php');
include_once('../Modelos/modelo.php'); //ESTA ES LA CLASE QUE ME GESTIONA LA CONEXION A LA BD
 
class facturamodel extends modelo
{
    protected $Factura;
    protected $Contrato;
 
    public function __construct()
{
    $this->Factura = new Facturas();
    $this->Contrato = new Contratos();
 
 
}
 
public function creacionfactura($Factura,$Contrato,$Fecha_Emitida,$Fecha_Procesamiento,$Descripcion_factura,$Valor_Total,$Pay,$checks,$Importe)
{
 
$this->_db->autocommit(FALSE);
try{
$this->_db->begin_transaction();
 
$this->Factura->crear_factura($Factura,$Contrato,$Fecha_Emitida,$Fecha_Procesamiento,$Descripcion_factura,$Valor_Total,$Pay);
    if (isset($checks)) {
        $ids = $checks;
        $impors =$Importe;
        $a = count($ids);
        $i = 0;
    }
    while ($i < $a) {
 
        $this->Factura->multiplescc($Factura, $ids[$i], $impors[$i]);
 
        $i = $i + 1;
    }
 
    $this->Contrato->Rebajar_Monto($Valor_Total,$Contrato);
 
    $this->_db->commit();
}
catch (Exception $exception){
    $this->_db->rollback();
 
}
}
 
}

UNA VEZ MAS PRECISO DE SU AYUDA CERTERA!!!!.

GRACIAS
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