Las entrevistas de PHP cubren semántica del lenguaje, OOP, Laravel o Symfony, MySQL, y fundamentos de seguridad web. Aquí están las preguntas más comunes con respuestas modelo. Middle: comprensión más profunda, optimización y situaciones reales de trabajo.
1
¿Cuál es la diferencia entre `has_many through` y `belongsToMany`?
Respuesta
En términos de Laravel, belongsToMany usa una tabla pivot que existe solo para unir dos modelos. Una relación has-many-through alcanza un modelo distante vía uno intermedio que es una entidad real por derecho propio. Si la tabla de unión lleva sus propios datos — un timestamp, un status — es un modelo, y tratarla como pivot es cómo esos datos se vuelven incómodos de alcanzar.
2
¿Qué es una consulta N+1 y cómo encuentras una?
Respuesta
Una consulta para una lista y una más por elemento, porque una relación se carga de forma lazy dentro de un loop. La encuentras en el log de consultas o con un paquete que cuenta consultas por request. with() la carga eager en una segunda consulta. La trampa es arreglarla cacheando la página en vez de la consulta.
3
¿Qué hace el service container?
Respuesta
Resuelve las dependencias de una clase por ti: pides un tipo en un constructor y el container lo construye, incluyendo las propias dependencias de ese tipo. Vincular una interfaz a una implementación en un provider es lo que hace que el código dependa de un contrato en vez de una clase concreta, que es el punto de todo el ejercicio.
4
¿Cuál es la diferencia entre un middleware y un controller?
Respuesta
El middleware envuelve el request y decide si continúa — autenticación, rate limiting, logging. Un controller maneja el request que logró pasar. El orden importa, y poner la autorización en un controller en vez de middleware significa que cada controller tiene que recordar hacerlo.
5
¿Cómo funcionan las colas, y qué tiene que ser cierto de un job?
Respuesta
El job se serializa a un store, un proceso worker lo saca y lo corre fuera de banda. Lo que tiene que ser cierto es que puede correr dos veces — el worker puede crashear después de hacer el trabajo y antes de confirmarlo. Cualquier cosa que envíe dinero o correo necesita una guarda, y los jobs de larga duración necesitan un timeout más corto que la ventana de visibilidad.
6
¿Cuál es la diferencia entre una migration y un seeder?
Respuesta
Una migration cambia el schema y está versionada para que cada entorno converja a la misma forma. Un seeder inserta datos — filas de referencia en producción, datos falsos en desarrollo. Poner cambios de datos dentro de una migration es común y está bien para datos de referencia, pero hacer backfill de una tabla grande ahí bloquea el deploy.
7
¿Cómo previenes SQL injection y XSS?
Respuesta
SQL injection se previene con parameter binding, que el query builder y Eloquent hacen por ti — el peligro es DB::raw con input interpolado. XSS se previene escapando en la salida, que las {{ }} de Blade hacen y las {!! !!} deliberadamente no. Ambos son sobre no mezclar datos en un lenguaje en el momento equivocado.