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];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
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();