Gabriel Diaz
Jordi Yair Calva García
Sebastian Beltran Zapata
Rafael Gasull
veo que no hay aportes asi que aprovecho para decir que esta weno el curso y gracias por traerlo :3
También se puede usar el repository directamente como inyección de dependencia:
<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\JsonResponse; use App\Repository\CommentRepository; use Symfony\Component\Routing\Annotation\Route; class CommentController extends AbstractController { #[Route('/comment', name: 'app_comment')] public function index(CommentRepository $comments): JsonResponse { $repo = $comments->findAll(); return $this->json($repo); } }
#[Route('/')] public function home(EntityManagerInterface $entityManager): Response { // return $this->render( 'home.html.twig',[ // 'comments' => $entityManager->getRepository(Comment::class)->findAll() // ]);
// BUSCA EN ORDEN DESENDENTE $commets = $entityManager->getRepository(Comment::class)->findBy([], [ 'id' => ' DESC' ]); return $this->render( 'home.html.twig',[ 'comments' => $commets ]);
}
Estructura Inicial
La representación de una tabla en mi proyecto es una entidad
use App\Entity\Comment; //Mi entidad (mi tabla) use Doctrine\ORM\EntityManagerInterface; //También necesito un sistema que administre a mis entidades
return $this->render('home.html.twig', [ 'comments' => $entityManager->getRepository(Comment::class)->findAll() ]);
Por partes:
render retorna una vista, Este método toma dos argumentos principales: La ruta al archivo de la vista (en este caso home.html.twig) Un array asociativo de variables que queremos pasar a la vista (en este caso queremos pasar los comments de nuestra base de datos)
$entityManager es el objeto que hemos definido en el argumento de la función del tipo EntityManagerInterface, administra entidades (nuestras tablas de bases de datos)
->getRepository(Comment::class) pedimos que nos de el repositorio asociado a la entidad ‘Comment’. El repositorio es una forma de encapsular las consultas a la base de datos.
Nota: usar ::class en php te da el nombre completamente calificado de la clase Comment, en este caso le decimos a doctrine que nustra clase esta en App\Entity\Comment. Ayuda a evitar errores tipográficos, refactorizar de manera segura y mejorar la legibilidad.
También analicemos aquí:
$comments = $entityManager->getRepository(Comment::class)->findBy([], [ 'id' => 'DESC' ]); … return $this->render('home.html.twig', [ 'comments' => $comments ]);
>findBy([], ['id' => 'DESC']) llamamos al metodo findBy que podemos consultar en Repository/CommentRepository.php:
@method Comment[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
Y veremos que lo que hemos hecho es darle los dos primeros argumentos:
array $criteria → lo hemos pasado como array vacio []
array $orderBy = null → si no le pasamos nada, sería null, nosotros le hemos pasado ‘id’ ⇒ ‘DESC’
Y podríamos pasarle el limite y el offset de la siguiente manera:
$comments = $entityManager->getRepository(Comment::class)->findBy([], [ 'id' => 'DESC' ], 1, 1); //En este caso el límite es 1 y saltaríamos el 1 valor. (mostrariamos el segundo valor ordenado en DESC