Personalización de colecciones en Laravel: conozca el atributo CollectedBy

  • Publicado el 02 diciembre, 2024
  • Palabras: 59

¿Alguna vez quisiste personalizar tus colecciones de modelos sin anular métodos? ¡El nuevo atributo CollectedBy de Laravel hace que esto sea elegante y sencillo! Exploremos este enfoque claro para la personalización de colecciones.

Personalización de colecciones en Laravel: conozca el atributo CollectedBy

#El atributo CollectedBy

En lugar de anular el método newCollection(), ahora puedes usar un atributo simple:

 

use IlluminateDatabaseEloquentAttributesCollectedBy;

#[CollectedBy(PostCollection::class)]
class Post extends Model
{
    // Your model code here
}

 

#Ejemplo práctico

A continuación te mostramos cómo puedes implementar esto en un sistema de blog:

 

use IlluminateDatabaseEloquentAttributesCollectedBy;
use IlluminateDatabaseEloquentModel;

// Custom Collection Class
class PostCollection extends Collection
{
    public function published()
    {
        return $this->filter->isPublished();
    }

    public function byCategory($category)
    {
        return $this->filter(fn($post) => $post->category_id === $category);
    }
}

// Model Using Custom Collection
#[CollectedBy(PostCollection::class)]
class Post extends Model
{
    protected $casts = [
        'published_at' => 'datetime',
    ];

    public function isPublished()
    {
        return !is_null($this->published_at) && 
               $this->published_at->isPast();
    }
}

// Usage
$posts = Post::all()->published();
$techPosts = Post::all()->byCategory(5);

 

Este nuevo enfoque basado en atributos proporciona una forma más clara y declarativa de especificar colecciones personalizadas para sus modelos. Ya no es necesario anular métodos: ¡solo declare y listo!

Antonio Jenaro
Antonio Jenaro

Web Developer

Archivado en:

Fuente: Harris Raftopoulos

Inicia la conversación

Hazte miembro de Antonio Jenaro para comenzar a comentar.

Regístrate ahora

¿Ya estás registrado? Inicia sesión