Laravel: how to remove item from Collection by id

Stefan Bogdanescu

Founder & Senior Architect · 2026-06-29

Laravel Company

Laravel: How to Remove an Item from a Collection by ID

As a senior developer working with the Laravel ecosystem, you frequently deal with manipulating data retrieved from Eloquent models, often stored within Collections. When we talk about removing items, the method we use depends entirely on whether we are operating on a raw PHP array, a standard Collection object, or an Eloquent relationship.

The confusion you are experiencing—where methods like forget() seem to behave unexpectedly when dealing with database IDs—is very common. It highlights the crucial difference between manipulating simple arrays and interacting with the complex structure of Laravel Collections populated by Eloquent objects.

This post will walk you through the correct, robust ways to remove an item from a Laravel Collection based on its associated ID, ensuring your data manipulation is accurate and follows best practices.

Understanding the Misconception: Why forget() Doesn't Work for IDs

You noted that using methods like forget(1) seems to affect array elements starting from index 0. This happens because collections, especially when populated by Eloquent models, are designed to manage object references rather than simple numerical indices in the way a native PHP array does.

When you fetch data via $users = User::all();, you receive a Collection of User objects. Trying to use methods intended for array indexing or simple key removal directly on these complex objects often leads to unexpected behavior, especially when dealing with primary keys which are internal to the model structure rather than the collection's display index.

The goal isn't to change the underlying PHP array structure; the goal is to remove a specific Eloquent record from the resulting set. We need methods that understand the relationship between your collection and the database.

The Correct Approaches for Removing Items by ID

There are three primary, effective strategies for removing an item from a Collection based on its ID: filtering, using where clauses, or direct deletion.

Method 1: Filtering the Collection (The Safest Approach)

The most idiomatic and safest way to remove items is to filter the collection, keeping only the items you want to retain. This avoids mutation errors by creating a new collection rather than directly modifying the existing one in a potentially confusing manner.

If you want to remove the user with ID 1 from the $users collection:

php
use App\Models\User;

// 1. Grab all the users
$users = User::all();

// 2. Define the ID to exclude
$idToRemove = 1;

// 3. Filter the collection to remove the item by its primary key (id)
$updatedUsers = $users->filter(function ($user) use ($idToRemove) {
    return $user->id !== $idToRemove;
});

// Now, $updatedUsers contains all users except the one with ID 1.

This method is highly flexible. If you need to remove multiple items based on a list of IDs, you can use where for more complex querying:

php
$idsToRemove = [1, 5, 10];

$filteredUsers = $users->filter(function ($user) use ($idsToRemove) {
    return !in_array($user->id, $idsToRemove);
});

Method 2: Removing via Eloquent Deletion (The Database Approach)

If your ultimate goal is to permanently delete the record from the database (which is often the case when removing an "admin" user), the most efficient approach is to use Eloquent's built-in deletion methods, rather than just manipulating the in-memory collection.

First, find the model instance you wish to remove:

php
$user = User::find(1);

if ($user && $user->hasRole('admin')) {
    // Permanently delete the record from the database
    $user->delete();
}

After performing the deletion, if you need to refresh your local collection, you should re-fetch the data:

php
// Refresh the list after deletion
$users = User::all();

This ensures data integrity because the removal is committed directly to the database. For more complex scenarios involving relationships, understanding Eloquent's power—as detailed on the Laravel documentation—is key to writing clean code.

Conclusion

To summarize, avoid attempting to modify a Collection by direct index manipulation or methods like forget() when dealing with Eloquent models and database IDs. Instead, rely on functional collection methods like filter() to create a new, desired state of the collection based on your criteria, or utilize Eloquent's native delete() method for permanent record removal. By adhering to these patterns, you ensure your Laravel applications remain predictable, scalable, and robust.