GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Node.js - Join com 3 tabelas utilizando Sequelize

Tags: #<Tag:0x00007f22e36b03e8>

galera, fiz o join com as tabelas bairros e municípios porém preciso fazer um join com a tabela de estados. porém não estou conseguindo fazer.
vou deixar o código abaixo…

    async list(req,res){
        var bairros = await BairrosService.ListaBairros();
       res.json(bairros);
        if(bairros.length<1){
            res.redirect("/bairro");
        }else{
            res.render("Bairro/list",{bairros});
        }
    }



**********AQUI É MEU MODEL DE BAIRROS*************

'use strict';
module.exports = (sequelize, DataTypes) => {
  const Bairro = sequelize.define('Bairro', {
    descricao: DataTypes.STRING,
    municipio_id: DataTypes.INTEGER
  }, {});
  Bairro.associate = function(models) {
  Bairro.hasOne(models.Municipio, {foreignKey: 'id',sourceKey: 'municipio_id'});
 
  };
  return Bairro;
};
const bairro = Bairro.findAll({
     where: {descricao: nome},
     include: [
        { 
             association: 'municipio',
             include: [
                   { association: 'estado' }
             ]
        }
     ]
})
1 Curtida

Pronto, o foi feito o relacionamento, está funcionando! muito obrigado! porém a consulta que está retornando é um LEFT OUTER JOIN sendo que era pra ser inner join.
como faço pra resolver isso?

consegui!! adicionei o required:true.

                include: [
                   { 
                        association: 'Municipio',required: true,
                        include: [
                              { association: 'Estado',required: true, }
                        ]
                   }
                ]

no

include: {association: '', required: true|false } ]

é esse required que define se vai ser inner (true) ou left (false)

1 Curtida

agora, me tira só mais uma duvida…
como faço para trazer na consulta apenas os campos que irei utilizar?
pq da forma que está ele trás todos os campos e isso conta em questão de performance.

const pesquisar = async id => await Pedido.findByPk(id,
    {
        include: [
            {
                association: 'itens',
                attributes: ['id','quantidade', 'embalagem', 'valorDesconto', 'precoVenda'],
                include: [{
                    association: 'produto',
                    attributes: ['id', 'ean', 'descricao']
                }]
            }
        ]
    });
1 Curtida

obrigado man!
aprendi muito só nesse post.
:slight_smile:

1 Curtida

Bom dia so uma duvida pessoal e se tivesse 4 tabelas?

por exemplo

pedido
-cliente
-itens
-produto

//