Manipulación de Colecciones y Serialización de Datos en Laravel
Resumen
¿Qué son las colecciones en Laravel y cómo se utilizan?
Las colecciones en Laravel son un conjunto de datos que nos permiten trabajar con grandes cantidades de información utilizando métodos intuitivos. Gracias a la clase Collection, podemos manipular datos de manera efectiva y ordenada. Estas colecciones son instancias que abren posibilidades de transformar, filtrar, agrupar, y más, sin necesidad de recorrer manualmente los arrays o estructuras.
Al trabajar con Eloquent, la clase Collection se instancia automáticamente, permitiéndonos emplear varios métodos para manejar nuestros datos. Algunas operaciones comunes incluyen comprobar si una colección contiene un elemento o filtrar la colección basándonos en ciertas condiciones.
¿Cómo podemos verificar y manipular colecciones?
Verificar la existencia de un elemento
Podemos utilizar métodos como contains para determinar si una colección contiene un elemento particular. Este método es útil para validar la presencia de un dato antes de realizar acciones adicionales.
$users->contains('id',4);
Filtrar elementos de una colección
Podemos filtrar elementos de una colección para mostrar solo aquellos que nos interesen. Por ejemplo, utilizando except, podemos eliminar ciertos elementos de la colección.
$users->except([1,2,3]);
Aquí, indicamos que queremos excluir los elementos con ID 1, 2 y 3, dejando solo aquellos que no cumplan con esta condición.
Obtener un único elemento
Para buscar un único elemento, podemos usar el método find, que nos proporciona un acceso directo a un objeto dentro de la colección.
$user=$users->find(4);
Este código busca y devuelve el usuario con ID 4.
¿Cómo establecer relaciones con otras tablas?
Al trabajar con bases de datos relacionales, podemos definir y cargar relaciones entre tablas. En este contexto, trabajar con colecciones nos permite ver no solo los datos de los usuarios, sino también sus relaciones con otros elementos, como posts.
$users->load('posts');
Esto integra los posts relacionados con cada usuario dentro de la colección, permitiéndonos manipular y mostrar datos relacionados de forma eficiente.
¿Qué es la serialización y cómo se aplica?
Convertir colecciones a diferentes formatos
La serialización es el proceso de transformar estructuras complejas de datos en formatos que puedan ser transferidos fácilmente, como arrays o JSON. En Laravel, esto se usa para manipular cómo se devuelven y presentan los datos.
Serialización a un Array
Podemos convertir una colección en un array puro, permitiendo trabajar con los datos de la misma forma que con un array normal.
$array=$users->toArray();
Serialización a JSON
Convertir la colección a JSON es otro enfoque común, especialmente útil cuando se está construyendo una API.
$json=$user->toJson();
Este método prepara los datos para el intercambio de información entre aplicaciones o para su representación en un front-end.
Laravel, con su enfoque en colecciones y serialización, nos proporciona herramientas poderosas que simplifican el manejo de datos complejos. Estas funcionalidades son esenciales para desarrollar aplicaciones eficientes y mantener un código limpio y escalable. Así que, ¡sigue aprendiendo y experimentando para dominar estas técnicas!
Para aquello que quieran usar otras alternativas a dd() tambien existe
print_r()var_dump()
pueden ver una compartiva entre estos métodos en este link.
Se utiliza dd() para detener la aplicación en ese punto, print_r() y var_dump() continuan con la ejecucion y en caso de crashear no es muy facil encontrar el error
la idea de dd() es no usar eso.
Diferencia entre find() y only()
El método find() es capaz de buscar recibiendo un id o un modelo
$users =User::all();$userx = $users->find(1);//instancia de la clase User$user->find($userx)// o$user->find(1);
El método only() solo puede buscar por el id
$users =User::all();$user->only(1);
En ambos podemos buscar mas de un elemento pasando por parámetro un array
Un genio como explica Italomoralesf!! HAGAN MAS VIDEOS CON EL!!!! :)
Excelente lección!!! de parte del profe, solo agregaria para los que no estan tan familiarizados con PHP, recuerda esta clase de tipo collection es una abstracción de eloquent, si bien tambien hereda de la clase Iterable igual que un array en PHP puro por asi decir, tener una abstracción como esta nos permite hacer uso de metodos que nos devuelven datos que pueden ser de mucha ayuda en el desarrollo otra cosa por la que se suele hacer estas abstracciones es para estandarizar los filter y map por ejemplo, ya que en PHP puro existen estas funciones pero el orden de los parametros en ambas cambia por tanto con una abstraccion como las collections de Laravel ganamos mas helpers y tambien una API fluida y estandarizada
Gran aporte mi amigo.
DUPLICAR LINEAS
En visual studio code, podemos usar la combinacion de teclado
ALT + SHIFT + UP /ABAJO
¿Cual sería la diferencia entre usar with y load para traer la información que tiene con alguna tabla que tenga relación?
A lo que he visto ambos funcionan igual.
Ambos proporcionan los mismos resultados. Pero hay una diferencia clave, de hecho en un video posterior lo aclaro debido a un error :)
with() carga las relaciones por adelantado y luego la consulta.
load() ejecuta la consulta y luego las relaciones.
Por ejemplo para un listado sería conveniente usar with() pero para un elemento podría usar load().
with es un metodo que anade eager loading en la consulta por tanto, si tienes instalado Laravel debugbar o Telescope (recomiendo telescope), puedes ver en una gran cantidad de consultas como se reduce significativamente la cantidad de llamadas a la base de datos y por tanto tambien el trabajo del servidor y la respuesta es mas rapida
Esa conversion de los datos de la base de datos a json me es muy util al trabajar con Vue.js, los datos del componente se manejan por este formato.
Con VUEjs, React, etc :) Algo así haremos en el proyecto de API con TDD
Ya realice el proyecto con TDD y me surgio una duda.
¿Tambien para los datos que seran consumidos por parte de react, vue, etc, la ruta tambien debe de estar en api?, ya que normalmente los pongo en web.
Eso de JSON esta genial
:)
Para poder visualizar los datos con formato JSON, podemos pasar el argumento JSON_PRETTY_PRINT al métódo toJson:
dd($user->toJson(JSON_PRETTY_PRINT));
Podremos verlo de una forma mas legible en el navegador
La serialización es importante para cuando trabaja con Web Services pues usualmente se deben retornar los datos en formato JSON y recibir los datos como arrays:D
tomando en cuenta que las colecciones son como una extension para usar métodos o funcionalidad extra, cual es la diferencia entre usar estas métodos o usar directamente el where con eloquent?
No hay diferencia, cuando usar Eloquent esta extiende de Collection
gracias Profesor!
Es posible generar estas relaciones entre tablas desde artisan?
Uno a Muchos
Muchos a Uno
Muchos a Muchos
¡Hola! No, desde artisan no es posible, toca hacerlo manualmente desde los modelos :D
Existe alguna diferencia entre jsonSerialize y toJson a la hora de la serialización?
En sí toJson es un shortcut de Collections en Laravel que hace el proceso de fondo de seralizar a un JSON, por ende ambos son correctos y cumplen con una misma función.
Claro como estamos usando Laravel es preferible utilizar los helpers del mismo.
¿Cómo podría imprimir de forma más "bonita" (ó legible) el Json en el navegador?
Hola, para dar estilos lo que uno imprime en la consola se puede usar %c para pasar estilos. Ejemplo.
Firefox por default tiene una extensión para formatear el JSON y hacerlo legible siempre y cuando el response un Json y no solo texto plano que lo parezca un json. Para google puedes añadir la extension JSON viewer awesome....
Pregunta
¿Los métodos que usamos en la parte de colecciones se podría usar con otros campos que no sea el id? por ejemplo usar el metodo find() para buscar por nombres o carnet de identidad.
el método find funciona solo para buscar por claves primarias, si quieras buscar por otro atributo podrías usar where.
En la actualidad ya estan disponibles Laravel 8 y 9 es necesario visualizar este curso que es de una version que no es compatible actualmente?
Metodos disponibles en las colecciones
++Elloquent instancia la clase collections.++
.
Las collecciones nos devuelven un conjunto de datos, en este caso un arreglo que contiene objetos. Y cada objeto representa un registro de la base de datos.
.
Elloquent (collections) >--contiene--> array of objects
.
Ejemplo: esta coleccion contiene al creador de laravel, a su esposa y al lamborgini: