Laravel 5.8 Eloquent check if record exists

Stefan Bogdanescu

Founder & Senior Architect · 2026-06-29

Laravel Company

The Eloquent Existence Dilemma: How to Correctly Check if a Record Exists

As developers working with Eloquent in Laravel, we frequently encounter situations where checking for the existence of a database record seems straightforward but yields confusing results. A common pitfall involves understanding what methods like get() actually return when no matching data is found.

The scenario you described—where using $checker === null fails to catch existing records, and an if/else block incorrectly handles empty results—is extremely common. This confusion stems from the difference between returning a strict null and returning an empty collection.

This post will dive deep into the correct, idiomatic ways to check for record existence in Laravel Eloquent, ensuring your database queries are efficient and your logic is sound. We will explore why your specific code snippet behaved as it did and present the best practices for managing data presence.

Understanding What get() Returns

When you execute a query using methods like where() followed by get(), Eloquent returns a Illuminate\Database\Eloquent\Collection.

  1. If records are found: $checker will be an Eloquent Collection containing the matching model(s).
  2. If no records are found: $checker will be an empty Collection.

Crucially, an empty collection is not null. When you use a loose comparison (== null) or strict comparison (=== null), it only checks if the variable points to the actual PHP null value. Since an empty collection is an object (a collection), it evaluates differently in conditional statements, leading to unexpected behavior like the "Has data" result when you expected "None data."

Let's look at your original example:

php
$checker = Purchase::select('id')->where('id', $request->itemid)->get();
if ($checker === null){ // This will almost always be false if the query runs successfully.
    echo "None data";
} else {
    echo "Has data"; // This executes when an empty collection is returned.
}

Because $checker returns an empty collection instead of null, your else block executes, even when no record exists, which leads to the logical error you observed.

Best Practice 1: The Most Efficient Check with exists()

If your sole purpose is to determine if a record exists—without needing to retrieve the data itself—the most efficient method is to use the exists() method. This executes a highly optimized SELECT 1 FROM ... query, which is much faster than fetching entire model objects.

This approach adheres to Laravel's philosophy of writing clean, performant code, aligning perfectly with the principles discussed on the Laravel documentation.

Example using exists()

php
$itemId = $request->itemid;

// Check existence directly via the query builder
$exists = Purchase::where('id', $itemId)->exists();

if ($exists) {
    echo "Record found!";
    // Now you can safely retrieve the model if needed:
    $purchase = Purchase::where('id', $itemId)->first();
} else {
    echo "No record found.";
}

Best Practice 2: Retrieving the Record with first() or find()

If your goal is to check for existence and retrieve the associated data in a single, clean step, use the first() or find() methods. These methods stop execution upon finding the first match and return either the model instance or null. This makes conditional checks straightforward.

Example using first()

php
$itemId = $request->itemid;

// Retrieve the first matching record, or null if none is found.
$purchase = Purchase::where('id', $itemId)->first();

if ($purchase === null) {
    echo "None data: The item ID {$itemId} does not exist.";
} else {
    echo "Has data! Found purchase with ID: " . $purchase->id;
}

Conclusion

When dealing with Eloquent and database existence checks, always choose the method that best suits your requirement for performance and clarity.

  1. For simple existence checks: Use exists(). It is the fastest and most resource-efficient way to answer "Does this record exist?"
  2. For retrieving a single model: Use first() or find(). These methods return null when no results are found, making conditional logic (if ($model === null)) perfectly reliable.

By understanding the difference between an empty collection and null, you move beyond syntactic correctness to achieve true developer efficiency. Always aim for the most direct and optimized Eloquent solution when building your Laravel applications.