Dump a una entidad sin desbordar la memoria:
\Doctrine\Common\Util\Debug::dump($entity);
Anotaciones:
//Ordenar por defecto cuando hacemos por ejemplo $user->getComments() Class User { //.. /** * @ORM\OneToMany(targetEntity=Comment::class, mappedBy="users") * @ORM\OrderBy({"createdAt" = "DESC"}) */ private $comments; //EXTRA LAZY: si solo vamos a contar la cantidad de elementos, por ejemplo en twig: // user.comments|lengh //Podria ser veneficioso incluir la anotación EXTRA_LAZY, que solo hace una consulta sql COUNT, que es más rapida que traer todos los comentarios y luego hacer una consulta más para contarlo. Como contra, cuando traemos comantarios para mostrarlos la consulta COUNT siempre estara presente. /** * @ORM\OneToMany(targetEntity=Comment::class, mappedBy="users", fetch="EXTRA_LAZY") * @ORM\OrderBy({"createdAt" = "DESC"}) */ private $comments;
Criterias:
//Las Criterias son útiles para agregar condiciones en las consultas //En la clase repositorio de Comments //Agregamos una Criteria de solo los comentarios no borrados public static function createNonDeletedCriteria(): Criteria { return Criteria::create() ->andWhere(Criteria::expr()->eq('isDeleted', false)) ->orderBy(['createdAt' => 'DESC']) ; } //Luego la podemos llamar en un método del repositorio public function findAllPublished() { $qb = $this->createQueryBuilder('a') ->addCriteria(self::createNonDeletedCriteria()); return $qb ->getQuery() ->getResult() ; } //tambien la podemos llamar en un método en la entidad Class Comment { //... public function getNonDeletedComments(): Collection { $criteria = CommentRepository::createNonDeletedCriteria(); return $this->comments->matching($criteria); }
Solucionar problema N+1 en consultas con JOIN:
//Clase repositorio public function findAllWithSearch(?string $term) { $qb = $this->createQueryBuilder('c') ->innerJoin('c.article', 'a') ->addSelect('a'); -> Esta line hace que se consigan los items en la misma consulta }
Tipos de mapeo de datos en Doctrine:
Strings
1. string (para textos cortos): este tipo mapea un SQL VARCHAR a un string de PHP.
2. text (para textos largos): este tipo mapea un SQL CLOB a un string de PHP.
Números
1. integer (entero): este tipo mapea un SQL INT a un entero de PHP.
2. smallint (entero corto): este tipo mapea un SMALLINT en la base de datos a un entero de PHP.
3. bigint (entero largo): este tipo mapea un BIGINT en la base de datos a un entero de PHP.
4. decimal (número decimal): este tipo mapea un SQL DECIMAL a un string en PHP.
5. float (número con punto flotante): este tipo mapea un SQL FLOAT a un double en PHP. Solo funciona con configuración de zona que utilice punto decimal como separador.
Fecha y hora
1. date (fecha): este tipo mapea un SQL DATETIME a un objeto DateTime de PHP.
2. time (hora): este tipo mapea un SQL TIME a un objeto DateTime de PHP.
3. datetime (fecha y hora): este tipo mapea un SQL DATETIME/TIMESTAMP a un objeto DateTime de PHP.
4. datetimez (fecha y hora): este tipo mapea un SQL DATETIME/TIMESTAMP a un objeto DateTime de PHP con uso horario.
Otros tipos
1. boolean (booleano): este tipo mapea un SQL boolean a un boolean de PHP.
2. object (objeto): este tipo mapea un SQL CLOB a un objeto de PHP utilizando serialize() y unserialize().
3. array: este tipo mapea un SQL CLOB a un array de PHP utilizando serialize() y unserialize().
4. simple_array: este tipo mapea un SQL CLOB a un array de PHP utilizando implode() y explode(), con “,” (coma) como delimitador. Los valores del array no deben contener “,”.
5. json_array: este tipo mapea un SQL CLOB a un array de PHP utilizando json_encode() y json_decode().
6. guid: este tipo mapea un GUID/UUID a un string de PHP. Varchar por defecto pero si la plataforma lo soporta utiliza un tipo especifico.
7. blob: este tipo mapea un SQL CLOB a un resource stream de PHP.