Uno de los puntos fuertes de Laravel es su elegante sintaxis. Si tiene muchos modelos y relaciones en Laravel (debido a la gran cantidad de tablas en la base de datos), el recorrido a menudo puede terminar en un código menos elegante. Con el tiempo, tres pequeñas extensiones me han resultado exitosas y me gustaría presentarles brevemente a continuación. Para hacer esto simplemente usamos algo de herencia, métodos mágicos y colecciones personalizadas.
Primero creamos un nuevo modelo en app \ ConvenienceModel.php:
b45e29b9125c2ab565b5526442437686
Entonces dejamos que todos los modelos hereden de nuestro nuevo ConvenienceModel:
b45e29b9125c2ab565b5526442437686
Mezcle sus propias funciones con las relaciones
Si desea obtener modelos conectados, use la sintaxis estándar para llamarlos:
b45e29b9125c2ab565b5526442437686
Si ahora agrega su propia lógica de negocios, le gustaría usar la notación de mayúsculas y minúsculas (inferior):
b45e29b9125c2ab565b5526442437686
Queremos estandarizar la sintaxis de ambas variantes. Para hacer esto, agregamos el método mágico __call al ConvenienceModel:
b45e29b9125c2ab565b5526442437686
Esta llamada también es posible en el ejemplo anterior.:
b45e29b9125c2ab565b5526442437686
Comprobar objetos vacíos
Si desea mostrar el nombre del país para la dirección de una persona, a menudo verá el siguiente código.:
b45e29b9125c2ab565b5526442437686
Para evitar esto, incluimos la biblioteca stringhelper y devolvemos un objeto especial de la clase vacía `empty` si no se encuentra un modelo.:
b45e29b9125c2ab565b5526442437686
Esto significa que la llamada se realizó correctamente (en este ejemplo, si se encuentra algo, se muestra el nombre del país, en todos los demás casos una cadena vacía):
b45e29b9125c2ab565b5526442437686
Si también queremos cubrir el caso de que el usuario con el ID 42 ni siquiera exista, también crearemos una pequeña función de ayuda para esto:
b45e29b9125c2ab565b5526442437686
La siguiente llamada entrega una cadena vacía incluso si el usuario no existe en absoluto:
b45e29b9125c2ab565b5526442437686
Cómodamente atravesar relaciones n: m
Finalmente, queremos simplificar el siguiente código:
b45e29b9125c2ab565b5526442437686
Para ello utilizamos la posibilidad de colecciones personalizadas . Primero estamos expandiendo el modelo de conveniencia:
b45e29b9125c2ab565b5526442437686
A continuación, creamos el archivo app\Helpers\ConvenienceCollection.php , que garantiza que cuando se llamen funciones desconocidas en Collections, la función se ejecute para todos los elementos de la colección.:
b45e29b9125c2ab565b5526442437686
Entonces podemos usar el siguiente código para generar todos los nombres de todos los países de todas las direcciones de todos los padres de la persona:
b45e29b9125c2ab565b5526442437686
Pero también son posibles llamadas como las siguientes:
b45e29b9125c2ab565b5526442437686
Ordenar por varias columnas
El siguiente comando ordena únicamente por ubicación , aunque probablemente ese no era el resultado previsto.:
b45e29b9125c2ab565b5526442437686
Para habilitar la clasificación según varias columnas, estamos ampliando nuestra colección ConvenienceCollection:
b45e29b9125c2ab565b5526442437686
Con eso podemos ordenar la colección de acuerdo a varias columnas con:
b45e29b9125c2ab565b5526442437686
Clasificación estándar
Ampliamos la colección ConvenienceCollection con otra función auxiliar:
b45e29b9125c2ab565b5526442437686
Ahora puede darle a cada modelo una función de clasificación estándar individual:
b45e29b9125c2ab565b5526442437686
Entonces podemos ordenar una colección con:
b45e29b9125c2ab565b5526442437686
Nombres de objetos
Cada modelo implementa el método getLabel (getName varía según el modelo):
b45e29b9125c2ab565b5526442437686
Con esto, puede generar rápida y fácilmente el nombre de un objeto. A continuación, puede implementar el método auxiliar sortByLabel en ConvenienceCollection:
b45e29b9125c2ab565b5526442437686
Resultados vacíos
Si un paso intermedio está vacío, las funciones de Laravel first () y last () generalmente devuelven cero. Por lo tanto, introducimos getFirst () y getLast () para que la siguiente llamada siempre tenga éxito:
b45e29b9125c2ab565b5526442437686
Adjunto entregamos un __empty_helper que __x reconoce:
b45e29b9125c2ab565b5526442437686