es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Sequelize bull crea con un id común basado en los datos previamente insertados.

Estoy intentando insertar los siguientes datos utilizando sequelize y nodejs en mi base de datos.

{
“basicDetails”: {
“companyName”: “demo”,
“email”: “demo5@demo.com”,
“phone”: “5019918819”,
“address”: “manab”,
“pincode”: “400078”,
“city”: “Mumbai”,
“state”: “Maharashtra”
},
“subOffices”: [
{
“subofficename”: “bpo”,
“location”: “random”
},
{
“subofficename”: “fintech”,
“location”: “worli”
}
],
“companyUsers”: [
{
“userName”: “Random user”,
“userEmail”: “random@us.com”,
“userPhone”: “0000000000”
},
{
“userName”: “Demo User”,
“userEmail”: “demo@us.com”,
“userPhone”: “1111111111”
}
]
}

Básicamente tengo 3 tablas:

  1. Cliente (id)
  2. SubOficinas (clave foránea es el id de cliente)
  3. CompanyUsers (clave foránea es el id de cliente)

Los detalles básicos se almacenarán en una tabla de clientes y utilizando el ID de esos datos. Me gustaría insertar las suboficinas y los usuarios de la empresa en sus respectivas tablas donde la clave foránea sería el ID que obtengo al insertar mis detalles básicos en la tabla de clientes.

Puedo insertar los detalles básicos en la tabla de clientes y obtener la identificación de esos datos. Me gustaría hacer una inserción masiva utilizando sequelize incluyendo la ID que obtengo de los datos del cliente como una clave foránea para él.

router.post(“/addClient”, async function(req, res) {
const basicdetails = req.body.basicDetails;
console.log(basicdetails);
const subofficesData = […req.body.subOffices];
const companyusers = […req.body.companyUsers];
console.log(“suboffices: ” + suboffices);
subofficesData.forEach(item => console.log(item));
companyusers.forEach(item => console.log(item));

const data = await client.create({
companyName: basicdetails.companyName,
email: basicdetails.email,
mobileNumber: basicdetails.phone,
address: basicdetails.address,
pincode: basicdetails.pincode,
city: basicdetails.city,
state: basicdetails.state,
});

console.log(data.id);

const subofficesResult = await suboffices.bulkCreate(subofficesData, {
clientId: data.id,
});
console.log(subofficesResult);

// console.log(req.body.suboffices);
});

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para realizar una inserción masiva usando Sequelize para suboficinas y usuarios de empresas, puede utilizar el método bulkCreate(). Puede pasar subofficesData o companyusers como el primer argumento a este método y un objeto de opciones como segundo argumento que contenga clientId: data.id para relacionar las entradas con la entrada Cliente correspondiente en la base de datos.

    Aquí hay un ejemplo de código:

    router.post("/addClient", async function (req, res) {
      const basicdetails = req.body.basicDetails;
    
      const subofficesData = [...req.body.subOffices];
      const companyusers = [...req.body.companyUsers];
    
      const data = await client.create({
        companyName: basicdetails.companyName,
        email: basicdetails.email,
        mobileNumber: basicdetails.phone,
        address: basicdetails.address,
        pincode: basicdetails.pincode,
        city: basicdetails.city,
        state: basicdetails.state,
      });
    
      const subofficesResult = await suboffices.bulkCreate(subofficesData.map(suboffice => ({
        ...suboffice,
        clientId: data.id,
      })));
    
      const companyUsersResult = await companyusers.bulkCreate(companyusers.map(user => ({
        ...user,
        clientId: data.id,
      })));
    
      res.json({ data, suboffices: subofficesResult, companyUsers: companyUsersResult });
    });
    

    En este fragmento de código, estamos mapeando los arrays subofficesData y companyusers, y creando un nuevo objeto para cada entrada con el campo clientId establecido en data.id.

    Luego, pasamos estos arrays modificados al método bulkCreate() junto con el objeto de opciones de { clientId: data.id } para insertar los registros con la clave externa correcta como la entrada Cliente que acabamos de crear.

    También hemos agregado una respuesta JSON al final para que pueda ver el resultado de todas las inserciones.

    Esperamos que esto le ayude a lograr su objetivo de insertar los datos usando Sequelize y NodeJS en su base de datos.

Comments are closed.