<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Paul Soberanes</title>
    <description>The latest articles on DEV Community by Paul Soberanes (@soberanes).</description>
    <link>https://dev.to/soberanes</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F638362%2F5254aa3d-fdff-4d32-bf60-c7afc499ea5f.jpeg</url>
      <title>DEV Community: Paul Soberanes</title>
      <link>https://dev.to/soberanes</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/soberanes"/>
    <language>en</language>
    <item>
      <title>Preguntas en entrevista técnica de Laravel</title>
      <dc:creator>Paul Soberanes</dc:creator>
      <pubDate>Fri, 12 Apr 2024 23:21:54 +0000</pubDate>
      <link>https://dev.to/soberanes/preguntas-en-entrevista-tecnica-de-laravel-1466</link>
      <guid>https://dev.to/soberanes/preguntas-en-entrevista-tecnica-de-laravel-1466</guid>
      <description>&lt;p&gt;Prepararse para una entrevista técnica es fundamental para destacar como candidato y demostrar tus habilidades técnicas.&lt;/p&gt;

&lt;p&gt;Algunas razones por las cuales prepararse son:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Demostrar conocimiento específico&lt;/strong&gt;, ya que en las entrevistas técnicas se evalúa la comprensión profunda de la tecnología o lenguaje de programación requerido por el perfil de la posición.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Demostrar experiencia&lt;/strong&gt; como desarrollador. Puedes hablar sobre proyectos anteriores, desafíos o cómo solucionarías ciertos problemas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Obtener confianza&lt;/strong&gt;. Prepararte te dará la confianza necesaria durante la entrevista. Practicar con preguntas y escenarios frecuentes te ayudará a responder de manera más efectiva.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Diferenciarte de otros candidatos&lt;/strong&gt;. Piensa en esto, hay muchos desarrolladores allá afuera (y muchos más que vienen en camino) y todos tenemos habilidades distintas, pero prepararte para una entrevista hará que destaques. Y es que las compañías buscan candidatos que puedan integrarse de inmediato a los proyectos.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Así es que prepararse para una entrevista técnica te dará la oportunidad de repasar tus conocimientos y adquirir nuevos, demostrarás tus habilidades e irás más allá de los conocimientos prácticos con los que ya cuentas.&lt;/p&gt;

&lt;p&gt;Es por esto que aquí te dejo algunas de las preguntas más comunes que surgen durante una entrevista técnica para desarrolladores web donde se requiera experiencia con el framework Laravel.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Para este artículo me basé en la publicación de &lt;a href="https://www.fullstack.cafe/blog/laravel-interview-questions"&gt;FullStack.Cafe - Real Tech Interview Questions And Answers For Devs&lt;/a&gt;, agregando mayor contexto, ejemplos y &lt;em&gt;beneficios o ventajas&lt;/em&gt; de cada tema, para enriquecer las respuestas.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h4&gt;
  
  
  1. ¿Qué es Laravel?
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;Dificultad: ⭐&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Laravel es un &lt;strong&gt;framework de PHP&lt;/strong&gt; que facilita el desarrollo de aplicaciones web. Su diseño de software se basa en el patrón &lt;strong&gt;MVC (Modelo Vista Controlador)&lt;/strong&gt;, que lo convierte en una herramienta poderosa para desarrolladores que buscan crear aplicaciones modernas más eficientes y estructuradas.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. ¿Cuáles son los beneficiones de utilizar Laravel sobre otros frameworks de desarrollo web?
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;Dificultad: ⭐&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://laravel.com/"&gt;Laravel&lt;/a&gt; ofrece una serie de ventajas que lo distinguen de otros frameworks web, por ejemplo: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sintaxis elegante&lt;/strong&gt; que permite aplicar técnicas de &lt;em&gt;clean code&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;El uso de &lt;strong&gt;Eloquent ORM&lt;/strong&gt; para interactuar con bases de datos.&lt;/li&gt;
&lt;li&gt;Un sistema de &lt;strong&gt;enrutamiento&lt;/strong&gt; flexible y fácil de usar.&lt;/li&gt;
&lt;li&gt;Una &lt;strong&gt;estructura&lt;/strong&gt; de archivos simple y organizada.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Paquetes y funcionalidades&lt;/strong&gt; precargadas, como autenticación y autorización.&lt;/li&gt;
&lt;li&gt;Una &lt;strong&gt;documentación muy completa&lt;/strong&gt;, además de una &lt;strong&gt;comunidad&lt;/strong&gt; muy grande, que permite aprender y resolver la mayoría de los problemas.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  3. ¿Qué es el Patrón de diseño Facade y cómo se usan en Laravel?
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;Dificultad: ⭐⭐&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;El &lt;strong&gt;Patrón de diseño Facade&lt;/strong&gt; es una técnica de programación utilizada para simplificar la interacción con sistemas complejos. En Laravel, este patrón proporciona una interfaz simplificada para acceder a funcionalidades del framework.&lt;/p&gt;

&lt;p&gt;En palabras simples, actúa como una "fachada" que simplifica el acceso a funcionalidades específicas sin exponer todos los detalles internos de dichas funciones.&lt;/p&gt;

&lt;p&gt;En Laravel, los &lt;em&gt;Facades&lt;/em&gt; son clases que ofrecen un acceso "&lt;strong&gt;estático&lt;/strong&gt;" a objetos dentro del &lt;strong&gt;Service Container&lt;/strong&gt; de la aplicación. Estos Facades ofrecen una sintaxis simple, similar a los métodos estáticos, pero mantienen &lt;em&gt;flexibilidad&lt;/em&gt; y _testabilidad _de las inyecciones de dependencias. Un ejemplo del uso de Facades es el siguiente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;Illuminate\Support\Facades\Cache&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;Illuminate\Support\Facades\Route&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nc"&gt;Route&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/cache'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;Cache&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'key'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Los &lt;strong&gt;beneficios&lt;/strong&gt; de usar Facades en Laravel son &lt;strong&gt;sintaxis elegante&lt;/strong&gt;, &lt;strong&gt;facilitan las pruebas&lt;/strong&gt; y &lt;strong&gt;evitan el exceso de uso de dependencias&lt;/strong&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  4. ¿Qué es el Service Container?
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;Dificultad: ⭐⭐&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;El &lt;strong&gt;Service Container&lt;/strong&gt; en Laravel es una herramienta para gestionar las dependencias de clases y realizar la &lt;strong&gt;&lt;em&gt;inyección de dependencias&lt;/em&gt;&lt;/strong&gt; en la aplicación.&lt;/p&gt;

&lt;p&gt;La &lt;strong&gt;inyección de dependencias&lt;/strong&gt; es una técnica donde las dependencias de una clase se "inyectan" en la clase a través del constructor, o en algunos casos utilizando métodos "setter". Con esta técnica, las clases reciben automáticamente las instancias de otras clases necesarias para funcionar correctamente.&lt;/p&gt;

&lt;p&gt;Ahora bien, el &lt;strong&gt;Service Container&lt;/strong&gt; es la aplicación del concepto anterior en la aplicación de Laravel. La función principal es administrar las dependencias entre clases.&lt;/p&gt;

&lt;p&gt;Las ventajas de contar con el Service Container en Laravel son la &lt;strong&gt;resolución automática&lt;/strong&gt; de dependencias, una &lt;strong&gt;menor configuración&lt;/strong&gt; a la hora de crear clases nuevas, y finalmente una aplicación &lt;strong&gt;más limpia y mantenible&lt;/strong&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  5. ¿Qué son las migraciones?
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;Dificultad: ⭐⭐&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Se podría pensar en las &lt;strong&gt;migraciones&lt;/strong&gt; de Laravel como el "control de versiones" para la base de datos. Ya que permiten a un equipo crear, modificar y compartir el esquema de base de datos de la aplicación.&lt;/p&gt;

&lt;p&gt;Las migraciones son clases que nos permiten crear y modificar la estructura de la base de datos, así como sus tablas y columnas según sea necesario.&lt;/p&gt;

&lt;p&gt;Se escriben con código y se ejecutan mediante comandos, y cada migración representa un cambio específico en la base de datos, por lo que facilita el seguimiento de cambios realizados.&lt;/p&gt;

&lt;p&gt;Algunos de los &lt;strong&gt;beneficios&lt;/strong&gt; son el &lt;strong&gt;control de versiones&lt;/strong&gt;, la &lt;strong&gt;colaboración&lt;/strong&gt; y la &lt;strong&gt;reproducibilidad&lt;/strong&gt;, es decir, puedes &lt;strong&gt;&lt;em&gt;recrear&lt;/em&gt;&lt;/strong&gt; la base de datos en cualquier entorno utilizando las mismas migraciones.&lt;/p&gt;

&lt;h4&gt;
  
  
  6. ¿Qué es Eloquent ORM?
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;Dificultad: ⭐⭐&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Eloquent&lt;/strong&gt; es un componente del framework que se encarga de la &lt;strong&gt;interacción con bases de datos&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Eloquent es el &lt;strong&gt;ORM (Object-Related Mapper)&lt;/strong&gt; predeterminado de Laravel, su función es mapear las tablas de la base de datos a objetos, que son los &lt;strong&gt;Modelos&lt;/strong&gt; dentro de la estructura de la aplicación. &lt;/p&gt;

&lt;p&gt;Cada modelo es una clase, el cual contiene métodos para efectuar consultas como &lt;code&gt;select&lt;/code&gt;, &lt;code&gt;where&lt;/code&gt;, &lt;code&gt;join&lt;/code&gt;, etc. El siguiente es un ejemplo de un modelo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kn"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;App\Models&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;Illuminate\Database\Eloquent\Model&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;User&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Model&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;protected&lt;/span&gt; &lt;span class="nv"&gt;$table&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'users'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Nombre de la tabla&lt;/span&gt;
    &lt;span class="k"&gt;protected&lt;/span&gt; &lt;span class="nv"&gt;$fillable&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'name'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'email'&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt; &lt;span class="c1"&gt;// Columnas permitidas para asignación masiva&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;y para consultar usuarios se hace de la siguiente manera:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;User&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Buscar usuario con ID 1&lt;/span&gt;
&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$user&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Acceder al nombre del usuario&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Entre los &lt;strong&gt;beneficios&lt;/strong&gt; de usar Eloquent se encuentra la &lt;strong&gt;sintaxis expresiva&lt;/strong&gt;, &lt;strong&gt;relaciones&lt;/strong&gt; entre modelos sencillas y legibles, y que &lt;strong&gt;facilita las pruebas&lt;/strong&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  7. ¿Qué es el Query Builder en Laravel?
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;Dificultad: ⭐⭐&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;El &lt;strong&gt;Query Builder&lt;/strong&gt; en Laravel es una interfaz que permite interactuar con bases de datos de manera estructurada y segura, al igual que Eloquent ORM, pero sirve para construir consultas mucho más complejas.&lt;/p&gt;

&lt;p&gt;Con Query Builder puedes consultar tablas y sus relaciones sin necesidad de tener un modelo y sin escribir &lt;strong&gt;Raw Queries&lt;/strong&gt;, es decir, consultas SQL directamente en el código. El resultado de una consulta es una &lt;strong&gt;Colección&lt;/strong&gt;, es decir, una instancia de &lt;code&gt;Illuminate\Support\Collection&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;El Query builder utiliza enlace de parámetros PDO para proteger la aplicación contra ataques de inyección SQL.&lt;/p&gt;

&lt;p&gt;Un ejemplo de uso es el siguiente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="no"&gt;Illuminate\Support\Facades\DB&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nv"&gt;$users&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;DB&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;table&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'users'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El método &lt;code&gt;get&lt;/code&gt; devuelve una colección y se puede acceder a las columnas como propiedades del objeto de la siguiente manera:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="k"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$users&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nv"&gt;$user&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$user&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Los &lt;strong&gt;beneficios&lt;/strong&gt; son la &lt;strong&gt;independencia de la base de datos&lt;/strong&gt;, una &lt;strong&gt;sintaxis simple y legible&lt;/strong&gt; y la &lt;strong&gt;seguridad&lt;/strong&gt; contra &lt;em&gt;SQL Injection&lt;/em&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  8. ¿Cuáles son los beneficios de &lt;em&gt;Eager Loading&lt;/em&gt; y cuándo usarlos?
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;Dificultad: ⭐⭐⭐&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Eager Loading&lt;/strong&gt; en Laravel es una técnica esencial para optimizar las consultas a la base de datos y mejorar el rendimiento al trabajar con relaciones entre modelos.&lt;/p&gt;

&lt;p&gt;Principalmente resuelve el problema de las consultas &lt;strong&gt;N+1&lt;/strong&gt; al recuperar modelos relacionados de antemano mediante una sola consulta, evitando realizar múltiples consultas adicionales para obtener datos de los modelos relacionados.&lt;/p&gt;

&lt;p&gt;Los &lt;strong&gt;beneficios&lt;/strong&gt; son múltiples, tales como &lt;strong&gt;mejora del rendimiento&lt;/strong&gt;, evita el problema &lt;strong&gt;N+1&lt;/strong&gt;, garantiza la &lt;strong&gt;consistencia de datos&lt;/strong&gt;, entre otros.&lt;/p&gt;

&lt;p&gt;Cúando usar &lt;strong&gt;Eager Loading&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cuando sepas que &lt;strong&gt;accederas a datos relacionados&lt;/strong&gt; en la mayoría de las consultas.&lt;/li&gt;
&lt;li&gt;Cuando muestres &lt;strong&gt;listas o tablas de datos&lt;/strong&gt; el uso de eager loading es crucial.&lt;/li&gt;
&lt;li&gt;Si tienes &lt;strong&gt;relaciones anidadas&lt;/strong&gt;, por ejemplo un autor con sus libros.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Supongamos que tienes una tabla de Libros &lt;code&gt;Book&lt;/code&gt; con una relación de &lt;em&gt;muchos a uno&lt;/em&gt; con Autores &lt;code&gt;User&lt;/code&gt;, para cargar todos los libros con sus autores, puedes usar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$books&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Book&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;with&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'user'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="k"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$books&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nv"&gt;$book&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$book&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="s1"&gt;' escrito por '&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$post&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  9. ¿Cómo hacer &lt;em&gt;soft deletes&lt;/em&gt;?
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;Dificultad: ⭐⭐&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Los &lt;strong&gt;soft deletes&lt;/strong&gt; son una técnica que permite marcar registros como eliminados sin borrarlos físicamente de la base de datos. Esto es útil para mantener un historial o permitir la recuperación de datos eliminados.&lt;/p&gt;

&lt;p&gt;Para hacer un &lt;em&gt;soft delete&lt;/em&gt; en laravel, primero debemos tener una columna llamada &lt;code&gt;deleted_at&lt;/code&gt; en la tabla, se puede agregar mediante una migración. Además, en el modelo utilizamos el trait &lt;code&gt;softDeletes&lt;/code&gt; de Laravel.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;En la migración, agregamos la columna &lt;code&gt;deleted_at&lt;/code&gt;:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Schema&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;table&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'customers'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Blueprint&lt;/span&gt; &lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;softDeletes&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;En el modelo, utilizamos el trait SoftDeletes:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;Illuminate\Database\Eloquent\Model&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;Illuminate\Database\Eloquent\SoftDeletes&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Customer&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Model&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;SoftDeletes&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Para eliminar registros:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$customer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Customer&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;$customer&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nb"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// Marca como eliminado (soft delete)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Para restaurar un registro eliminado:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$customer&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;restore&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// Restaura el registro&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  10. ¿Qué son los &lt;em&gt;Query Scope&lt;/em&gt;?
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;Dificultad: ⭐⭐⭐&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Los &lt;strong&gt;Scopes&lt;/strong&gt; son métodos personalizados que puedes definir en los modelos de Eloquent para aplicar filtros comunes a las consultas.&lt;/p&gt;

&lt;p&gt;Las &lt;strong&gt;ventajas&lt;/strong&gt; de utilizar Query Scopes es que puedes &lt;strong&gt;reutilizar&lt;/strong&gt; consultas en los modelos, hace que las consultas sean más expresivas y &lt;strong&gt;fáciles de entender&lt;/strong&gt;, además de que promueven la &lt;strong&gt;coherencia&lt;/strong&gt; en el código al aplicar las mismas restricciones o filtros en diferentes partes de la aplicación.&lt;/p&gt;

&lt;p&gt;Supongamos que tienes un modelo &lt;code&gt;Post&lt;/code&gt; con una columna &lt;code&gt;status&lt;/code&gt;, puedes crear un scope para obtener solo los posts con status &lt;em&gt;activo&lt;/em&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kn"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;App\Models&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;Illuminate\Database\Eloquent\Model&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Post&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Model&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;scopeActive&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$query&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$query&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;where&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'status'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'active'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;De esta manera, en el controlador utilizas el scope así:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$activePosts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Post&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;active&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Además de esto, puedes crear &lt;strong&gt;Scopes Dinámicos&lt;/strong&gt; que acepten parámetros:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="c1"&gt;// model&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;scopeStatus&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$status&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$query&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;where&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'status'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$status&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// controller&lt;/span&gt;
&lt;span class="nv"&gt;$publishedPosts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Post&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'published'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nv"&gt;$draftPosts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Post&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'draft'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  11. ¿Qué son los nombres de rutas en Laravel?
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;Dificultad: ⭐&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Los &lt;strong&gt;nombres de rutas&lt;/strong&gt; en Laravel son una herramienta útil para referir una ruta específica por medio de un nombre, es decir, puedes asignar un nombre a una ruta por medio del método &lt;code&gt;name&lt;/code&gt; en la definición de ésta:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Route&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/user/profile'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;name&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'profile'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ahora puedes utilizar este nombre en lugar de la URL completa en cualquier parte de la aplicación:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'profile'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Genera la URL del perfil&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;redirect&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'profile'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Redirige al perfil&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Las ventajas de esta herramienta son: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Legibilidad&lt;/strong&gt;: Hace que el código sea más claro y fácil de entender.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mantenimiento&lt;/strong&gt;: Cambiar la URL de una ruta se hace en la definición y no en cada parte del código donde requieras la ruta.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evita errores de escritura&lt;/strong&gt;: Al usar nombres, se reduce la posibilidad de errores tipográficos en las URLs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  12. ¿Qué es un &lt;em&gt;Closure&lt;/em&gt; en Laravel?
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;Dificultad: ⭐⭐⭐&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Un &lt;strong&gt;Closure&lt;/strong&gt; es una función anónima. Los Closures se utilizan con frecuencia como métodos &lt;em&gt;Callback&lt;/em&gt; y pueden pasarse como parámetros a otras funciones.&lt;/p&gt;

&lt;p&gt;Conceptualmente, un Closure es una función con algunos argumentos "fijos" por el entorno cuando se define. Permite sortear las restricciones de alcance de variables de manera limpia.&lt;/p&gt;

&lt;p&gt;Considera el siguiente ejemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;manejar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Closure&lt;/span&gt; &lt;span class="nv"&gt;$closure&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nv"&gt;$closure&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;manejar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'¡Hola!'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aquí se define la función &lt;code&gt;manejar&lt;/code&gt; que toma un Closure como parámetro. El Closure se ejecuta dentro de la función &lt;code&gt;manejar&lt;/code&gt;, lo que resulta en un "¡Hola!".&lt;/p&gt;

&lt;p&gt;Los &lt;strong&gt;casos de uso&lt;/strong&gt; de los Closures pueden ser &lt;strong&gt;devoluciones de llamada (Callbacks)&lt;/strong&gt;, &lt;strong&gt;reglas de validación personalizadas&lt;/strong&gt; o &lt;strong&gt;middlewares&lt;/strong&gt; en Laravel.&lt;/p&gt;

&lt;h4&gt;
  
  
  13. Menciona algunos &lt;em&gt;Aggregates&lt;/em&gt; que ofrece el Query Builder de Laravel.
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;Dificultad: ⭐⭐⭐&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;El &lt;strong&gt;Query Builder&lt;/strong&gt; de Laravel proporciona varios métodos de agregación (&lt;strong&gt;Aggregates&lt;/strong&gt;) para calcular valores en las consultas de manera eficiente. Algunos de ellos son:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Count&lt;/strong&gt;. Devuelve el número total de registros en una tabla.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;DB&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;table&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'users'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nb"&gt;count&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Sum&lt;/strong&gt;. Calcula la suma de los valores en una columna específica.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$totalAmount&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;DB&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;table&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'orders'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'amount'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Max&lt;/strong&gt;. Obtiene el valor máximo en una columna:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$highestScore&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;DB&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;table&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'scores'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nb"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'score'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Min&lt;/strong&gt;. Obtiene el valor mínimo en una columna:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$lowestPrice&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;DB&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;table&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'products'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nb"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'price'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Avg&lt;/strong&gt;. Calcula el promedio de los valores en una columna:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$averageRating&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;DB&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;table&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'reviews'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;avg&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'rating'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  14. ¿Qué son los eventos en Laravel?
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;Dificultad: ⭐⭐⭐&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Los &lt;strong&gt;eventos&lt;/strong&gt; son una funcionalidad de Laravel que permite observar y manejar acciones específicas, aplicando el &lt;strong&gt;Patrón de Diseño Observer&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Básicamente, nos permite &lt;strong&gt;suscribirnos&lt;/strong&gt; y &lt;strong&gt;escuchar&lt;/strong&gt; eventos en la aplicación. Un evento es un incidente o alguna acción detectada y manejada por el programa.&lt;/p&gt;

&lt;p&gt;Algunos ejemplos de &lt;em&gt;eventos&lt;/em&gt; pueden ser cuando un usuario se registra, cuando un usuario inicia sesión, cuando se crea un pedido o se agrega un nuevo registro en alguna tabla de la base de datos.&lt;/p&gt;

&lt;p&gt;Las clases de &lt;strong&gt;eventos&lt;/strong&gt; se registran en el directorio &lt;code&gt;app/Events&lt;/code&gt;, mientras que las acciones o &lt;em&gt;listeners&lt;/em&gt; se registran en el directorio &lt;code&gt;app/Listener&lt;/code&gt;. Para crearlos puedes utilizar los comandos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan make:event OrderCreated

php artisan make:listener SendNewOrderNotification --event=OrderCreated
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esto creará la clase del evento, la cual no contiene lógica. Simplemente está ligada al modelo &lt;code&gt;Order&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kn"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;App\Events&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;App\Models\Order&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;Illuminate\Broadcasting\InteractsWithSockets&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;Illuminate\Foundation\Events\Dispatchable&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;Illuminate\Queue\SerializesModels&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;OrderCreated&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;Dispatchable&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;InteractsWithSockets&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;SerializesModels&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="cd"&gt;/**
     * Create a new event instance.
     */&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;__construct&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;Order&lt;/span&gt; &lt;span class="nv"&gt;$order&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;También genera la clase necesaria para manejar el evento (Listener):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kn"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;App\Listeners&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;App\Events\OrderCreated&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;SendNewOrderNotification&lt;/span&gt; 
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="cd"&gt;/**
     * Create the event listener.
     */&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;__construct&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// ...&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="cd"&gt;/**
     * Handle the event.
     */&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;handle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;OrderCreated&lt;/span&gt; &lt;span class="nv"&gt;$event&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Access the order using $event-&amp;gt;order...&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Por supuesto que hay muchísimos más temas que podrían salir durante la entrevista, tantos que sería imposible listarlos todos. Pero en general, considero que esta guía puede servirte para prepararte y profundizar en tus conocimientos sobre Laravel.&lt;/p&gt;

&lt;p&gt;Recuerda siempre mencionar casos donde puedes aplicar estos conceptos o técnicas, así como tus experiencias própias con Laravel.&lt;/p&gt;

&lt;p&gt;En general, una entrevista revisa aspectos básicos como &lt;strong&gt;Bases de datos&lt;/strong&gt;, &lt;strong&gt;Patrones de Diseño&lt;/strong&gt;, &lt;strong&gt;Rendimiento&lt;/strong&gt; o &lt;strong&gt;Principios de Desarrollo&lt;/strong&gt;. Considero que estos temas se cubren en esta guía, ya que al utilizar un frameword como Laravel estamos aplicando estas técnicas, quizás inconcientemente, pero esta guía quizás puede ayudarte a detectar estos principios (como SOLID o KISS), patrones de diseño o arquitectura (como Observadores o  Eventos) y técnicas para mejorar el &lt;em&gt;performance&lt;/em&gt; o rendimiento de una aplicación (como Aggregates o Scopes).&lt;/p&gt;

&lt;p&gt;Espero que esta guía haya sido de mucha ayuda en tu camino hacia la entrevista técnica, te deseo la mejor de las suertes, aunque sé que no la necesitarás.&lt;/p&gt;

&lt;p&gt;Como consejo final, confía en tí y en tus conocimientos. Si no conoces algo, pregunta a tu entrevistador la respuesta e interactúa con él.&lt;/p&gt;

&lt;p&gt;En futuras publicaciones agregaré preguntas comunes (o no tanto) sobre PHP, otros temas de desarrollo y tips en general para ayudarte a tener mejores entrevistas.&lt;/p&gt;

&lt;p&gt;Déjame en los comentarios si conoces algunas otras preguntas comunes, ya sea que te hayan hecho o que se te ocurran que pueden preguntar en una entrevista técnica de desarrollador web con Laravel.&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>php</category>
      <category>webdev</category>
      <category>español</category>
    </item>
  </channel>
</rss>
