Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

260
Vistas
Consulta sin procesar de Laravel e incluye relaciones de modelo.

Estoy tratando de devolver una sola publicación con una subconsulta para incluir un recuento de votos negativos y positivos. Puedo lograr esto usando una consulta sin formato.

Sin embargo, hacerlo significa que ya no puedo acceder a las relaciones de modelos de publicación, por ejemplo, comentarios.

¿Hay una manera más Elocuente en la que pueda hacer esto para mantener las relaciones de los modelos?

¿O hay una mejor manera en que podría estar haciendo todo el asunto? Me encantaría saber cómo lo harías.

 $post = DB::select( "SELECT post.*, (SELECT COUNT(*) FROM posts_votes WHERE type = 1 AND post_id = posts.id) AS up_votes, (SELECT COUNT(*) FROM posts_votes WHERE type = 2 AND post_id = posts.id) AS down_votes FROM posts INNER JOIN posts_votes ON posts.id = posts_votes.post_id WHERE posts.id = ?", [$id])[0];
about 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Esta es una pregunta antigua, pero es el primer resultado que obtengo cuando busco en Google "consulta sin procesar de relación de laravel", por lo que podría ser útil para otras personas que buscan lo mismo.

Logré resolverlo así:

 $query = ""; //raw query goes here $result = Model::fromQuery($query); $result->load('relationship');

Asegúrese de que su consulta sin procesar personalizada contenga las columnas adecuadas especificadas en el modelo; de lo contrario, la relación siempre devolverá un valor nulo.

Probado en Laravel 6.17.0

about 4 years ago · Santiago Trujillo Denunciar

0

Prueba esto

 Post::select('*') ->addSelect(DB::raw(' (select count(*) from posts_votes where type = 1 and post_id = posts.id) as up_votes ')) ->addSelect(DB::raw(' (select count(*) from posts_votes where type = 2 and post_id = posts.id) as down_votes ')) ->whereIn('id', $ids) ->get();
about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda