- Understanding the Query Builder
- Crafting Simple Conditions
- Chaining Conditions
- Array-Based Conditions
- Utilizing OrWhere
- Conditional Wheres
- Eloquent Shortcuts
Laravel's Query Builder is a gem in the world of web development. It simplifies the process of crafting SQL queries, making it more intuitive and less error-prone. One of its standout features is the 'Where' method, which streamlines complex queries. Let's delve into its intricacies.
Understanding the Query Builder
When you invoke a static method on a model, it's typically passed on to the Eloquent query builder. This is evident in the Builder class, where the 'where' method and its counterparts reside.
public static function __callStatic($method, $parameters) {
return (new static)->$method(...$parameters);
}
public function __call($method, $parameters) {
// ... other code ...
return $this->forwardCallTo($this->newQuery(), $method, $parameters);
}
The forwardCallTo
function directs the method call to $this->newQuery()
, which produces an instance of the Builder class.
/**
* Create a new query builder for the model's table.
*
* @return \Illuminate\Database\Eloquent\Builder
*/
public function newQuery() {
return $this->registerGlobalScopes($this->newQueryWithoutScopes());
}
The 'where
' method in the Builder class is versatile, handling a plethora of cases. Let's explore them.
Crafting Simple Conditions
The most straightforward way to frame a condition in Laravel is by supplying the key and value to 'where
'.
User::where('email', '[email protected]')->first()
This translates to:
SELECT * FROM users WHERE `email` = '[email protected]' LIMIT 1
Chaining Conditions
You can concatenate multiple 'where' conditions for more specific queries.
User::where('email', '[email protected]')
->where('first_name', 'Accred')->first()
This becomes:
SELECT * FROM users WHERE `email` = '[email protected]' AND `first_name` = 'Accred' LIMIT 1
Array-Based Conditions
You can also utilize an array to define multiple conditions.
User::where([
'email' => '[email protected]',
'last_name' => 'itly'
])->first()
This results in:
SELECT * FROM users WHERE `email` = '[email protected]' AND `last_name` = 'itly' LIMIT 1
OrWhere
Utilizing The 'OrWhere
' method introduces an OR constraint to your queries.
User::where('email', '[email protected]')
->orWhere('first_name', 'Accred')->first()
For more complex scenarios involving OR:
User::where(function($q) {
$q->where('email', '[email protected]')
->orWhere('last_name', 'itly');
})
->where('first_name', 'Accred')
->first()
This is equivalent to:
SELECT * FROM `users` WHERE (`email` = '[email protected]' or `last_name` = 'itly') AND `first_name` = 'Accred' LIMIT 1
Conditional Wheres
Apply specific conditions based on a boolean.
$isActive = true;
User::where('email', '[email protected]')
->when($isActive, function($q) {
$q->where('first_name', 'Accred');
})->first()
Eloquent Shortcuts
Laravel provides shortcuts to make your life easier.
Dynamic Where Clauses
Using dynamic method names, you can quickly filter by column values:
User::whereEmail('[email protected]')->first()
This is equivalent to:
SELECT * FROM `users` WHERE `email` = '[email protected]' LIMIT 1
Combining Conditions
You can also combine multiple conditions using dynamic method names:
User::whereEmailAndFirstName('[email protected]', 'Accred')->first()
This translates to:
SELECT * FROM `users` WHERE `email` = '[email protected]' AND `first_name` = 'Accred' LIMIT 1
Using OR Conditions
For cases where you want to apply an OR condition:
User::whereEmailOrLastName('[email protected]', 'itly')->first()
This results in:
SELECT * FROM `users` WHERE `email` = '[email protected]' OR `last_name` = 'itly' LIMIT 1
Checking for NULL Values
To find records where a specific column is null:
User::whereNull('activated_at')->get()
This translates to:
SELECT * FROM `users` WHERE `activated_at` IS NULL
Applying NOT Conditions
For scenarios where you want to exclude certain values:
User::whereNot('status', 'inactive')->all()
This becomes:
SELECT * FROM `users` WHERE NOT `status` = 'inactive'
Checking for Non-NULL Values
A counterpart to the previous method:
User::whereNotNull('activated_at')->all()
This is equivalent to:
SELECT * FROM `users` WHERE `activated_at` IS NOT NULL
Eloquent is a very powerful ORM for Laravel which, when used properly can make your developer experience a more pleasant experience, but also a more productive one.
Interested in proving your knowledge of this topic? Take the PHP Fundamentals certification.
PHP Fundamentals
Covering the required knowledge to create and build web applications in PHP.
$99

Related articles
Tutorials WordPress PHP Cyber Security
How to check your WordPress core installation for unauthorised changes
Safeguard your WordPress site by learning how to check your WordPress core installation for unauthorised changes. This article provides a step-by-step approach to maintaining the security and integrity of your WordPress core files.