Tengo una relación de laravel hasMany y quiero buscar los últimos 10 comentarios de una tabla y ordenarlos en orden descendente. Así es como se ve mi mesa
id | user_id | comment_text
----------------------------------------------------------
1 30 foo
2 23 bar
3 17 hello
4 30 world
5 12 lorem
6 10 ipsum
7 17 dummy
Mis resultados deberían ser
id | user_id | comment_text
----------------------------------------------------------
5 12 lorem
6 10 ipsum
7 17 dummy
Cómo estoy ejecutando la consulta para obtener los resultados esperados
SELECT * FROM (
SELECT * FROM comments ORDER BY id DESC LIMIT 3
) sub
ORDER BY id ASC
¿Cómo puedo hacer esto en un modelo de laravel? ¿Puedo ejecutar una subconsulta en una relación? Esta es mi implementación hasta ahora
public function latestComments($limit = 3)
{
return $this->hasMany(Comment::class)
->orderByDesc('id')
->limit($limit);
}
2 respuestas
Encontré una solución. Usando la función reverse
de Laravel, puedo obtener los resultados deseados, todo lo que necesito hacer es llamar a reverse
en la propiedad.
$post->latestComments->reverse()
Estás en el camino correcto, solo corrígelo un poco:
public function latestComments($limit = 3)
{
return $this->hasMany(Comment::class)
->orderBy('id', 'desc')
->take($limit);
}
Puede leer más de take
y orderBy
en documentos oficiales
Nuevas preguntas
php
PHP es un lenguaje de secuencias de comandos interpretado, dinámico, orientado a objetos y ampliamente utilizado, diseñado principalmente para el desarrollo web del lado del servidor. Se utiliza para preguntas sobre el lenguaje PHP.