
Creación de modelos consistentes con withAttributes en Laravel
- Publicado el 28 febrero, 2025
- Palabras: 113
¿Necesitas asegurarse de que los atributos estén configurados al crear modelos a través de relaciones? El método withAttributes de Laravel ofrece una solución elegante para la creación de modelos consistentes a través de métodos de relación.

Cuando se trabaja con métodos de relación restringidos, a menudo se desea que los modelos recién creados mantengan las mismas restricciones. El método withAttributes de Laravel garantiza que los modelos creados a través de estos métodos de relación reciban automáticamente los atributos esperados. Veamos cómo funciona:
class User extends Model
{
// Base relationship
public function posts(): HasMany
{
return $this->hasMany(Post::class);
}
// Constrained relationship with withAttributes
public function featuredPosts(): HasMany
{
return $this->posts()
->where('featured', true)
->withAttributes(['featured' => true]);
}
}
#Ejemplo práctico
A continuación se muestra cómo puede utilizar withAttributes en un sistema de gestión de contenido:
class Category extends Model
{
// Base products relationship
public function products(): HasMany
{
return $this->hasMany(Product::class);
}
// Published products with consistent creation
public function publishedProducts(): HasMany
{
return $this->products()
->where('status', 'published')
->withAttributes(['status' => 'published']);
}
// Featured products with consistent creation
public function featuredProducts(): HasMany
{
return $this->products()
->where('featured', true)
->withAttributes([
'featured' => true,
'featured_at' => now()
]);
}
}
Ahora, cuando cree modelos a través de estas relaciones restringidas, incluirán automáticamente los atributos especificados:
// Create a published product
$product = $category->publishedProducts()->create([
'name' => 'New Product',
'price' => 99.99
]);
// The status will automatically be "published"
dd($product->status); // "published"
// Create a featured product
$featured = $category->featuredProducts()->create([
'name' => 'Featured Item'
]);
// Automatically gets featured attributes
dd($featured->featured); // true
dd($featured->featured_at); // current timestamp
El método withAttributes resuelve el problema común de inconsistencia de atributos al crear modelos a través de relaciones restringidas. Garantiza que los modelos creados a través de relaciones filtradas mantengan las mismas restricciones que definen la relación.
Fuente: Harris Raftopoulos
Artículos relacionados
Inicia la conversación
Hazte miembro de Antonio Jenaro para comenzar a comentar.
Regístrate ahora¿Ya estás registrado? Inicia sesión