Фільтруйте атрибути моделі за допомогою нового методу except() у Laravel

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 16 травня, 2025
Laravel презентує метод Model::except(), який доповнює вже існуючий метод only(), пропонуючи інтуїтивний спосіб виключити конкретні атрибути при роботі з моделями Eloquent. Як зміни в роботі з атрибутами можуть покращити ваш код і зробити його більш зрозумілим? Читайте далі, щоб дізнатися, як цей новий метод спрощує обробку даних у вашій аплікації

Laravel презентує метод Model::except(), який доповнює вже існуючий метод only(), пропонуючи інтуїтивно зрозумілий спосіб виключення конкретних атрибутів при роботі з Eloquent моделями

Під час роботи з Eloquent моделями часто виникає необхідність отримати певний набір атрибутів для відображення в інтерфейсі або відповідях API. Laravel пропонує метод only() для вибору конкретних атрибутів, але іноді логічніше працювати в зворотному напрямку — залишаючи всі атрибути, окрім певних. Новий метод except() робить цей підхід зрозумілим і простим:

$attributes = $user->except('password', 'remember_token');
// Повертає всі атрибути, окрім password та remember_token

Цей метод особливо корисний при підготовці моделей до відображення або серіалізації, виключаючи чутливу інформацію:

class AccountController extends Controller
{
    public function profile(User $user)
    {
        // Повертає всі дані користувача, окрім чутливих полів
        return view('accounts.profile', [
            'userDetails' => $user->except('password', 'remember_token', 'two_factor_recovery_codes')
        ]);
    }
 
    public function settings(Request $request)
    {
        $user = $request->user();
 
        // Повертає всі атрибути користувача, окрім внутрішніх або чутливих
        return response()->json(
            $user->except('id', 'password', 'remember_token', 'login_attempts', 'created_at', 'updated_at')
        );
    }
}

Метод безперешкодно працює з відносинами та складними структурами даних:

class OrderController extends Controller
{
    public function receipt(Order $order)
    {
        // Завантажує замовлення з його відносинами
        $order->load('items', 'customer', 'payments');
 
        // Виключає внутрішні дані відстеження
        $orderData = $order->except('internal_tracking_id', 'risk_score', 'admin_notes');
 
        return view('orders.receipt', [
            'order' => $orderData
        ]);
    }
}

З додаванням методу except() поряд з існуючим only(), розробники Laravel отримали повний і гнучкий інструментарій для отримання точних атрибутів моделі в будь-якій ситуації, що робить код більш читабельним і зрозумілим