Метод withAttributes
в Laravel підвищує цілісність зв'язків, автоматично застосовуючи атрибути обмеження під час створення моделей через методи зв'язків
Основна реалізація забезпечує узгодженість атрибутів:
class User extends Model
{
// Основний зв'язок
public function posts(): HasMany
{
return $this->hasMany(Post::class);
}
// Обмежений зв'язок з використанням withAttributes
public function featuredPosts(): HasMany
{
return $this->posts()
->where('featured', true)
->withAttributes(['featured' => true]);
}
}
Цей підхід є особливо корисним у системах електронної комерції:
class Store extends Model
{
public function products(): HasMany
{
return $this->hasMany(Product::class);
}
// Активні продукти з гарантованим статусом
public function activeProducts(): HasMany
{
return $this->products()
->where('active', true)
->withAttributes(['active' => true]);
}
// Промоційні продукти з постійними атрибутами
public function promotionalProducts(): HasMany
{
return $this->products()
->where('on_sale', true)
->withAttributes([
'on_sale' => true,
'promotion_started_at' => now()
]);
}
}
Коли моделі створюються через ці зв'язки, вказані атрибути автоматично застосовуються:
// Створення через обмежений зв'язок
$newProduct = $store->promotionalProducts()->create([
'name' => 'Літня пропозиція',
'price' => 29.99
]);
echo $newProduct->on_sale; // true
echo $newProduct->promotion_started_at; // поточна дата та час
Метод withAttributes
забезпечує узгодженість вашої моделі даних, навіть коли нові записи створюються через фільтровані методи зв'язків