1
resposta

Includes

Tem uma forma mais fácil de fazer uma query dentro do include ?

Supor que tenho a tabela Pedido onde 'hasMany' Projetos,

Gostaria de fazer a query em pedidos aprovados e projetos de valor = 500 reais,

A query seria

Pedido.findAll({
    where: {aprovado: true}
    includes: {
        Model: Projeto,
        as: 'projetos',
        where: {valor : 500}
    }
})

Seria dessa forma ?

Outra dúvida é que de Projeto eu quiser colocar para mostrar os Itens do Projeto e também o dono do pedido seria algo assim ?

Pedido.findAll({
    where: {aprovado: true}
    includes:[
         {
            Model: Projeto,
            as: 'projetos',
            where: {valor : 500}
            includes: {
                Model: Item,
                as: 'itens'
            }
        },
        {
            Model: Usuario,
            as: 'dono',
        }
    ]
})

Se for assim como deixar mais enxuto ? Acabo tendo queries gigantes e no repositorio recebo os parametros, mas os services ficam passando esses argumentos gigantes que sinto depois dificuldade em ler o código

1 resposta

Oi Raiany, seu primeiro exemplo fez bastante sentido pra mim, acho que é dessa forma mesmo. Sobre o segundo ponto, não tem jeito, quanto mais relacionamentos envolvemos na consulta, mas complexo fica de escrever e ler o código no final das contas. O que pode ajudar você é armazenar pedaços da query em outras variáveis isoladas e passar elas para o findAll, algo assim:

const includeProjetos = {
    Model: Projeto,
    as: 'projetos',
    where: {valor : 500},
    includes: {
        Model: Item,
        as: 'itens'
    }
}

const includeUsuario = {
    Model: Usuario,
    as: 'dono',
}

Pedido.findAll({
    where: {aprovado: true}, 
    includes: [includeProjetos, includeUsuario]
})

No final, olhar apenas para o findAll, fica mais simples, e olhar separadamente o include de projetos e usuários também fica. Você pode usar essa estratégia, acho que ajuda.