Laravel introduces the Model::except() method to complement its existing only() method, offering a more intuitive way to exclude specific attributes when working with Eloquent models.
When handling Eloquent models, retrieving a subset of attributes is a common requirement for views or API responses. Laravel has provided the only() method for whitelisting specific attributes, but sometimes it's more logical to work from the opposite direction - keeping everything except certain attributes. The new except() method makes this approach straightforward and expressive:
$attributes = $user->except('password', 'remember_token');// Returns all attributes except password and remember_token
This method particularly shines when preparing models for display or serialization while excluding sensitive information:
class AccountController extends Controller{ public function profile(User $user) { // Return all user data except sensitive fields return view('accounts.profile', [ 'userDetails' => $user->except('password', 'remember_token', 'two_factor_recovery_codes') ]); } public function settings(Request $request) { $user = $request->user(); // Return all user attributes except internal or sensitive ones return response()->json( $user->except('id', 'password', 'remember_token', 'login_attempts', 'created_at', 'updated_at') ); }}
The method works seamlessly with relationships and complex data structures:
class OrderController extends Controller{ public function receipt(Order $order) { // Load the order with its relationships $order->load('items', 'customer', 'payments'); // Exclude internal tracking data $orderData = $order->except('internal_tracking_id', 'risk_score', 'admin_notes'); return view('orders.receipt', [ 'order' => $orderData ]); }}
With the addition of except() alongside the existing only() method, Laravel developers now have a complete and flexible toolkit for retrieving precisely the model attributes needed in any situation, making code more readable and intent clearer.