Uno de los puntos fuertes de Laravel es su elegante sintaxis. Si tiene muchos modelos y relaciones en Laravel (debido a muchas tablas en la base de datos), atravesar a menudo puede terminar en un código menos elegante. Con el paso del tiempo, tres pequeñas extensiones han demostrado su utilidad para mí, que quiero presentar brevemente a continuación. Solo usamos 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
Por tanto, esta llamada también es posible en el ejemplo anterior:
b45e29b9125c2ab565b5526442437686
Comprobar objetos vacíos
Si desea enviar el nombre del país a una dirección personal, 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 vacío si no se encuentra un modelo:
b45e29b9125c2ab565b5526442437686
Esto también hace que la llamada sea exitosa (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
Luego creamos el archivo app \ Helpers \ ConvenienceCollection.php , que asegura que llamar a funciones desconocidas en colecciones ejecute la función 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
La siguiente llamada solo ordena por ubicación , aunque probablemente no era lo que deseaba:
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