Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

337
Visualizações
Exclusión de resultados de la consulta Objetion/Knex según los resultados de withGraphFetched

Tengo dos modelos en Objeción: "marcas" y "ofertas".

Marca:

 const { Model } = require('objection') class Brand extends Model { static get tableName() { return 'brands' } ... static get relationMappings() { const Offer = require('./offer-model') return { offer: { relation: Model.HasManyRelation, modelClass: Offer, join: { from: 'brands.id', to: 'offers.brand_id' } } } } }

Oferta:

 const { Model } = require('objection') class Offer extends Model { static get tableName() { return 'offers' } }

Una marca tiene muchas ofertas, pero quiero obtener marcas que tengan al menos 1 oferta usando withGraphFetched, excluyendo las marcas que no tienen ofertas. Esto es lo que tengo hasta ahora:

 const brandModel = this.objection.models.brand const query = brandModel.query().withGraphFetched('offer') query.page(page, page_size) const offers = await query

Esto devuelve los datos "unidos", pero también devuelve las marcas que no tienen ofertas. Por ejemplo:

 [{ id:1, name: 'brand 1', offers: [{offerId: 1, offerName: 'offer 1'}] },{ id:2, name: 'brand 2', offers: [] }]

En los datos anteriores, no quiero que la marca con ID 2 esté en el conjunto de resultados.

Estoy usando Objeción/Knex para paginar los resultados, por lo que no puedo simplemente excluir las marcas con matrices de objetos vacías después de ejecutar la consulta.

Puedo lograr esto usando consultas sin procesar, pero eso significa que no puedo usar los atributos dinámicos de Objection y algunas otras partes clave de Objection.

¡Gracias!

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Simplemente puede agregar un whereExists a la consulta; algo como

 const query = brandModel.query() .withGraphFetched('offer') .whereExists( (qb) => qb.select('id').from('offers') .where('offers.brand_id', knex.ref('brands.id')) );

Aunque el bit de whereExists es directamente Knex, la consulta aún pasa por sus modelos, por lo que las cosas que ha definido allí aún deberían aplicarse (tal vez a menos que esté haciendo algo muy salvaje que afecta directamente las columnas utilizadas dentro de whereExists)

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda