symfony custom queries repository

ya venimos usando repositorios referidos a las entidades:

$em=$this->getDoctrine()->getRepository("Appundle:GenusNote");

a partir del cual podemos usar las funciones findAll() ó findOneBy()


que pasaría si quisieramos seguir usando esas funciones pero además agregar nuevas?

vamos a crear nuestro propio Repository:

en src/AppBundle/creamos la carpeta Repository y adentro la clase GenusNoteRepository

namespace AppBundle\Repository;
use AppBundle\Entity\Genus;
use Doctrine\ORM\EntityRepository;

class GenusNoteRepository extends EntityRepository{
/**
* @param Genus $genus
* @return GenusNote[]
*/
public function findAllRecentNotesForGenus(Genus $genus){
return $this->createQueryBuilder('recent_genus_note')
->andWhere('recent_genus_note.genus = :genus')
->setParameter('genus', $genus)
->andWhere('recent_genus_note.created > :recentDate')
->setParameter('recentDate', new \DateTime('-3 months'))
->getQuery()
->execute();
}
}

donde recent_genus_note: es el alias de la query

para enlazar este repository con la entidad le informamos a esta de su existencia a traves de esta
modificación:
en GenusNote

/**
 * @ORM\Entity(repositoryClass="AppBundle\Repository\GenusNoteRepository")
 * @ORM\Table(name="genus_note")
 */
class GenusNote
{



luego ya podemos usar ese metodo desde el controller:


class GenusController extends Controller{

...
/**
* @Route("/list-notes-from-repo")
*/
public function list2Action()
{
$em = $this->getDoctrine()->getManager();
// replace this example code with whatever you need
$genuses = $em->getRepository("AppBundle:Genus")->findAll();
$gnrep = $em->getRepository("AppBundle:GenusNote");
foreach($genuses as $genus){
echo ("***   ".$genus->getName()."   ***<br>");
$notes = $gnrep->findAllRecentNotesForGenus($genus);
if($notes){
foreach ($notes as $note) {
echo ($note->getNote()."<br>");
}
}else{
echo ("no se encontraron notas<br>");
}
//dump($genus->getNotes());
}

return new Response("hecho!");
}
...
}

No hay comentarios:

Publicar un comentario

linux ubuntu mint actualizar chrome

 desde una terminal: $ sudo apt update $ sudo apt install google-chrome-stable