Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

342
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!