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

388
Views
Cómo consultar usando whereBetween() del valor DB::raw() seleccionado

Tengo un resultado de consulta con el resultado sin procesar de la base de datos seleccionado y necesito agregar otra cláusula "where between" a esa consulta con el resultado sin procesar de la base de datos seleccionado. mi consulta es

 $products = Product::leftJoin('product_reviews', 'product_reviews.product_id', '=', 'products.id') ->select( 'products.*', DB::raw("IF(SUM(product_reviews.star_rating) != 0, SUM(product_reviews.star_rating) / COUNT(product_reviews.id), 0) AS rate") ) ->get();

Necesito agregar ->whereBetween('rate', [4, 5]) así a mi consulta. ¿Cómo puedo hacer eso?

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Debe usar ->havingBetween('rate', [4, 5])

 $products = Product::leftJoin('product_reviews', 'product_reviews.product_id', '=', 'products.id') ->select( 'products.id', DB::raw("IF(SUM(product_reviews.star_rating) != 0, SUM(product_reviews.star_rating) / COUNT(product_reviews.id), 0) AS rate") ) ->groupBy('products.id') ->havingBetween('rate', [4, 5]) ->get();

Prueba del generador de consultas de Laravel en línea

over 4 years ago · Santiago Trujillo Report

0

Si whereBetween('rate', [4, 5]) no funciona, creo que podrías hacer una de las siguientes cosas:

Podrías usar una subconsulta

 $sub = DB::query() ->select( 'products.*', DB::raw("IF(SUM(product_reviews.star_rating) != 0, SUM(product_reviews.star_rating) / COUNT(product_reviews.id), 0) AS rate") ) ->from('products') ->leftJoin('product_reviews', 'product_reviews.product_id', '=', 'products.id'); $products = Product::query() // using Product:: instead of DB:: to cast every result to a model. ->fromSub($sub, 'products') ->whereBetween('rate', [4, 5]); ->get();

Filtrar después de obtener los resultados

 $products = Product::query() ->select( 'products.*', DB::raw("IF(SUM(product_reviews.star_rating) != 0, SUM(product_reviews.star_rating) / COUNT(product_reviews.id), 0) AS rate") ) ->leftJoin('product_reviews', 'product_reviews.product_id', '=', 'products.id') ->cursor() ->filter(fn($product) => $product->rate >= 4 && $product->rate <= 5) ->values() ->collect();

O use DB::raw como el primer argumento de whereBetween

 $products = Product::query() ->select( 'products.*', DB::raw("IF(SUM(product_reviews.star_rating) != 0, SUM(product_reviews.star_rating) / COUNT(product_reviews.id), 0) AS rate") ) ->whereBetween( DB::raw('IF(SUM(product_reviews.star_rating) != 0, SUM(product_reviews.star_rating) / COUNT(product_reviews.id), 0)'), [4, 5] ) ->leftJoin('product_reviews', 'product_reviews.product_id', '=', 'products.id') ->get(); ```
over 4 years ago · Santiago Trujillo 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!