PHP - Error consulta SQL

 
Vista:
sin imagen de perfil

Error consulta SQL

Publicado por Yordy (2 intervenciones) el 24/03/2023 22:53:34
Buen día a todos, tengo el siguiente inconveniente. Estoy realizando una consulta en mi modelo de la siguiente 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
public function reducirStockProducto(int $productoid, int $cantidad) {
    $this->con = new Mysql();
    $query_update = "UPDATE producto
                     SET stock = stock - ?
                     WHERE idproducto = ?
                     AND stock >= (
                         SELECT SUM(cantidad)
                         FROM detalle_pedido
                         WHERE productoid = ?
                         AND cantidad IS NOT NULL
                         AND cantidad > 0
                         GROUP BY productoid
                     )";
    $arrData = array(
        $cantidad,
        $productoid,
        $productoid
    );
    $request_update = $this->con->update($query_update, $arrData);
    if ($request_update == 0) {
        throw new Exception("No hay suficiente stock disponible para completar la venta.");
    }
    return $request_update;
}

Al momento de modificar mi consulta para que, no venda productos si es mayor al stock, esta me recarga la página. ¿Qué hay de mal en la consulta que o me recarga la página, o no reduce el stock, pero si genere la venta?
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 Kathyu
Val: 1.802
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Error consulta SQL

Publicado por Kathyu (905 intervenciones) el 25/03/2023 09:48:43
Primero, depura tu código, no puedes saber que pasa (ni nosotros) sin que antes sepas donde pasa lo que pasa. Me entiendes?

Segundo, que te retorna $request_update pueda que por ahí ande la cosa.

Tercero, y lo que creo es más importante. La lógica de reducir un inventario se hace al revés, primero consultas tu stock, una consulta básica que te traiga tu stock en base al ID del producto, con ese stock ya en memoria (en una variable), evalúas si la cantidad vendida en este momento puede ser o no despachada.

Pseudocódigo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$idProducto = request(producto);
$cantidad = request(cantidad);
 
$query = "SELECT stock FROM productos WHERE idProducto = '$idProducto' ";
 
$stock = $result->$query;
 
if ($stock < $cantidad){
   echo "No hay suficiente stock disponible para completar la venta.";
}
else {
   $newStock = $stock - $cantidad;
   $update = "UPDATE productos SET stock = '$newStock' WHERE idProducto = '$idProducto' ";
}

En la mayoría de los casos se trabaja así, porque es más fácil de manejar la lógica y el entendimiento del código, además es más rápido de operar en la Base de Datos ya que todas las operaciones las haces en tu código y en el DBM solo haces sentencias de SELECT o UPDATE.

Si puedes plantearte cambiar la lógica, créeme que será más fácil para todos, no importa que en otros procesos lo tengas diferentes.
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