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 отримали повний і гнучкий інструментарій для отримання точних атрибутів моделі в будь-якій ситуації, що робить код більш читабельним і зрозумілим