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.

#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!
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