Laravel 5.8 Eloquent check if record exists
Stefan Bogdanescu
Founder & Senior Architect · 2026-06-29
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.
- If records are found:
$checkerwill be an Eloquent Collection containing the matching model(s). - If no records are found:
$checkerwill 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:
$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()
$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()
$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.
- For simple existence checks: Use
exists(). It is the fastest and most resource-efficient way to answer "Does this record exist?" - For retrieving a single model: Use
first()orfind(). These methods returnnullwhen 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.