Accede a todo EDteam con un único pago¡Sube a premium!

Andrea Vargas@andreavargas

Hola a todos. Estoy haciendo una aplicación en node js y mysql y estoy intentando agregar unos datos en una tabla llamada "clientes", pero al momento de guardar los datos se genera el siguiente error:

" UnhandledPromiseRejectionWarning: Error: ER_NO_REFERENCED_ROW_2: Cannot add or update a child row: a foreign key constraint fails (facturacion.clientes, CONSTRAINT fk_clientes_condicion_iva1 FOREIGN KEY (condicion_iva_id) REFERENCES condicion_iva (id) ON DELETE NO ACTION ON UPDATE"

No entiendo que es lo que sucede. Aquí les dejo el codigo sql:

CREATE TABLE IF NOT EXISTS  condicion_iva (
 id INT NOT NULL AUTO_INCREMENT,
 nombre VARCHAR(45) NOT NULL,
 porcentaje INT NOT NULL,
 PRIMARY KEY (id))
ENGINE = InnoDB;~~~ 

~~~CREATE TABLE IF NOT EXISTS tipo_cuenta (
 id INT NOT NULL AUTO_INCREMENT,
 nombre VARCHAR(45) NOT NULL,
 PRIMARY KEY (id))
ENGINE = InnoDB;~~~ 

~~~CREATE TABLE IF NOT EXISTS tipo_documento (
 id INT NOT NULL AUTO_INCREMENT,
 nombre VARCHAR(45) NOT NULL,
 PRIMARY KEY (id),
 UNIQUE INDEX nombre_UNIQUE (nombre ASC) VISIBLE)
ENGINE = InnoDB;~~~

~~~CREATE TABLE IF NOT EXISTS clientes (
 id INT NOT NULL AUTO_INCREMENT,
 nombre VARCHAR(80) NOT NULL,
 apellido VARCHAR(80) NOT NULL,
 telefono INT NOT NULL,
 email VARCHAR(45) NOT NULL,
 calle VARCHAR(150) NOT NULL,
 numero VARCHAR(10) NOT NULL,
 localidad VARCHAR(45) NOT NULL,
 provincia VARCHAR(50) NOT NULL,
 observaciones LONGTEXT NULL,
 condicion_iva_id INT NOT NULL,
 tipo_cuenta_id INT NOT NULL,
 tipo_documento_id INT NOT NULL,
 PRIMARY KEY (id, condicion_iva_id, tipo_cuenta_id, tipo_documento_id),
 UNIQUE INDEX email_UNIQUE (email ASC) VISIBLE,
 INDEX fk_clientes_condicion_iva1_idx (condicion_iva_id ASC) VISIBLE,
 INDEX fk_clientes_tipo_cuenta1_idx (tipo_cuenta_id ASC) VISIBLE,
 INDEX fk_clientes_tipo_documento1_idx (tipo_documento_id ASC) VISIBLE,
 CONSTRAINT fk_clientes_condicion_iva1
   FOREIGN KEY (condicion_iva_id)
   REFERENCES condicion_iva (id)
   ON DELETE NO ACTION
   ON UPDATE NO ACTION,
 CONSTRAINT fk_clientes_tipo_cuenta1
   FOREIGN KEY (tipo_cuenta_id)
   REFERENCES  tipo_cuenta (`id`)
   ON DELETE NO ACTION
   ON UPDATE NO ACTION,
 CONSTRAINT `fk_clientes_tipo_documento1`
   FOREIGN KEY (`tipo_documento_id`)
   REFERENCES `mydb`.`tipo_documento` (`id`)
   ON DELETE NO ACTION
   ON UPDATE NO ACTION)
ENGINE = InnoDB;~~~

2 - El código de mi ruta: 

~~~const express = require('express'); 
const router = express.Router(); 

const db = require('../database');

router.get('/crear', async (req,res) => {
   const condicionIva = await db.query('SELECT * FROM condicion_iva'); 
   const tipoCuenta = await db.query('SELECT * FROM tipo_cuenta'); 
   const tipoDocumento = await db.query('SELECT * FROM tipo_documento'); 
   console.log(condicionIva);  
   res.render('clientes/crear',  {condicionIva, tipoCuenta, tipoDocumento});
});

router.post('/crear', async(req, res) => {
   const { nombre } = req.body;
   const { apellido } = req.body; 
   const { telefono } = req.body;
   const { email } = req.body;
   const { calle } = req.body; 
   const { numero } = req.body;
   const { localidad } = req.body;
   const { provincia } = req.body;
   const { observaciones } = req.body;
   const { condicion_iva_id } = req.body;
   const { tipo_cuenta_id } = req.body;
   const { tipo_documento_id } = req.body;
   const newClientes = {
       nombre,
       apellido, 
       telefono,
       email,
       calle,
       numero,
       localidad,
       provincia, 
       observaciones, 
       condicion_iva_id, 
       tipo_cuenta_id, 
       tipo_documento_id
   };
   await db.query('INSERT INTO clientes set ?', [newClientes]);
   req.flash('success', 'Cliente guardado correctamente'); 
   res.redirect('/clientes'); 
   console.log(req.body); 
});
module.exports = router; ~~~

3- Y por último el código de mi vista: 

~~~<form action="/clientes/crear" method="POST">
            <div class="form-group">
                   <input type="text" class="form-control" name="nombre" placeholder="Nombre" autofocus>
                           </div>
                           <div class="form-group">
                               <input type="text" class="form-control" name="apellido" placeholder="Apellido" >
                           </div>
                           <div class="form-group">
                               <input type="number" class="form-control" name="telefono" placeholder="Teléfono">
                           </div>
                           <div class="form-group">
                               <input type="email" class="form-control" name="email" placeholder="Email">
                           </div>
                           <div class="form-group">
                               <input type="text" class="form-control" name="calle" placeholder="Calle">
                           </div>
                           <div class="form-group">
                               <input type="text" class="form-control" name="numero" placeholder="Número de Calle">
                           </div>
                           <div class="form-group">
                               <input type="text" class="form-control" name="localidad" placeholder="Localidad">
                           </div>
                           <div class="form-group">
                               <input type="text" class="form-control" name="provincia" placeholder="Provincia">
                           </div>
                           <div class="form-group">
                               <textarea name="observaciones" cols="30" rows="5" class="form-control" placeholder="Observaciones"></textarea>
                           </div>
                           <div class="form-group">
                               <select name="condicion_iva_id"  >
                                   {{#each condicionIva}}
                                   <option  >{{nombre}}</option>
                               {{/each}}
                               </select>
                           </div>
                           <div class="form-group">
                               <select name="tipo_cuenta_id" id="" >
                                   {{#each tipoCuenta}}
                                   <option  >{{nombre}}</option>
                               {{/each}}
                               </select>
                           </div>
                           <div class="form-group">
                               <select name="tipo_documento_id" id="" >
                                   {{#each tipoDocumento}}
                                   <option >{{nombre}}</option>
                               {{/each}}
                               </select>
                           </div>
                           <div class="form-group">
                               <button class="btn btn-success btn-block">Guardar </button>
                           </div>
                    </form>~~~

Agradecería cualquier ayuda que me puedan otorgar. Muchas gracias de antemano

Escribe una respuesta

Pregunta a ChatEDT