La semana pasada se realizo la Laracon2019 donde Taylor Otwell anuncio que para este mes tendremos disponible Laravel 6. Esta noticia sorprendió a la comunidad ya que no teníamos ni idea de cuales serian las características con las que contaría esta versión.
Pero, aquí en Laravel Tip, ya nos enteramos de la primer característica que vendrá en Laravel 6 y, en este mismo artículo listaremos otras probables características que se agregarán.
Nueva característica de Laravel 6
Taylor Otwell revelo la primera característica por medio de Twitter. Donde comenta que en Laravel 6 podremos crear y aplicar Middlewares en Jobs específicos.
¿Qué son los Job Middleware?
Los Job Middleware funcionarán igual que un Middleware pero, en lugar de aplicar su lógica a una request, el job middleware aplicará su lógica a un trabajo de cola.
¿Cómo funcionarán los Job Middleware en Laravel 6?
En versiones anteriores de Laravel existían, de cierta manera, los Job Middleware pero había que usar la función Bus::pipeThrough([new UnMiddleware])
en un service provider. Y estos middleware se ejecutaban para todos los jobs y no había forma de especificar que middleware queríamos que se aplique a un job en concreto.
Ahora, tendremos el método middleware() dentro del job para especificar que middlewares se ejecutarán para ese trabajo.
public function middleware(): array { return [
new UnMiddleware,
new UnSegundoMiddleware,
new OtroMiddleware,
]; }
La otra forma que tendremos de especificar un middleware para nuestro job es cuando despachemos el job. Podemos encadenar el método through()
especificando un arreglo de middlewares:
AlgunJob::dispatch()->through([new UnMiddleware]);
Posibles mejoras que vendrán en Laravel 6
La idea de los Job Middleware fue propuesta por un usuario a través del repositorio de Laravel en Github (https://github.com/laravel/ideas/issues/1356) y capto la atención de Taylor para agregarlo a su framework. Así que veremos algunas ideas interesantes que otros usuarios han propuesta.
- dropColumnIfExists(): Método para las migraciones que elimina una columna si existe. https://github.com/laravel/ideas/issues/1749.
- findOrCreateMany(): Método para Eloquent donde le pasamos un arreglo de datos y Eloquent los buscara y creara los que no ha encontrado. https://github.com/laravel/ideas/issues/1695.
- Shorten Route: Una idea interesante donde se propone escribir un grupo de rutas para un controlador especifico. https://github.com/laravel/ideas/issues/1281.
Estas son algunas de las ideas que se propusieron y podrían llegar a incluirse en el Framework, como puede que no.
Aquí esta la lista completa de ideas propuestas para Laravel 6, te la comparte y comenta cual te ha gustado o que idea se te ocurre que seria buena agregar al framework.
https://github.com/laravel/ideas/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen.
Muchas gracias por visitar Laravel Tip. Comparte este artículo si te ha gustado. Nos vemos en la próxima 😉🤙.
— ARTÍCULO ACTUALIZADO —
Otra nueva característica en Laravel 6: Subconsultas Eloquent
Seguimos enterándonos de nuevas características que se acercan en Laravel 6, en esta ocasión son una mejora en las subconsultas de Eloquent. Veamos de que se tratan.
Las subconsultas en Eloquent y su mejora en Laravel 6
Hasta Laravel 5.8 si queríamos realizar una consulta a la base de datos del estilo:
SELECT id, name, (SELECT created_at FROM logins WHERE users.id = logins.user_id LIMIT 1) AS last_login_at
FROM users;
Debíamos hacer uso de una función anónima:
La nueva mejora que vendrá en Laravel 6 es darle mas poder al método addSelect()
que ya existía en versiones anteriores. ¿Y cual es su súper poder? nos permitirá reemplazar la función anónima por el modelo al que estamos haciendo referencia en la subconsulta. Veamos como quedaría el ejemplo anterior aplicando esta nueva característica.
A parte de brindarnos un código más legible, podríamos mejorarlo aún más:
Además, como el método addSelect()
permite un arreglo, podríamos pasarle más de un modelo. ¡Me parece una característica genial!
Y los select para subconsultas no es todo!
Esta forma de reemplazar las funciones anónimas por modelos de Eloquent para generar una subconsulta se esta extendiendo a más métodos de Eloquent, que van a cambiar el juego! Otro de los métodos conocidos por todos que se ha extendido a esta funcionalidad es el método orderBy()
.
También podremos utilizar modelos Eloquent para ordenar por una subquery de la siguiente forma:
Aclaración sobre estas nuevas características
Quiero aclarar que tanto el método addSelect()
como orderBy()
siguen siendo compatibles con sus versiones anteriores. Lo que se hizo fue extender su lógica para soportar consultas Eloquent como parámetro.
¿Qué te ha parecido esta nueva característica? Deja tus comentarios aquí abajo que me gustaría saber sus opiniones al respecto.
Seguiré actualizando este artículo con todas las características de Laravel 6 a medida que me vaya enterando. Así que, no sería mala idea que te guardes este artículo en tus favoritos 😉. Nos vemos en la próxima.
Por mi lado, me gustaría ver un nuevo ORM tipo DataMapper. Al estilo Doctrine pero con sus mejoras. Obviamente, que se pueda elegir si utilizar Eloquent o el nuevo ORM.
Muy buen articulo.
Podrías hacer un articulo de como hacer filtros a un campo tipo JSON en mysql que tiene digamos la información de un cliente(nombre,correo,etc), y quisiera buscar por nombre del cliente.