Sling Academy
Home/PHP/Laravel Query Builder: Using ‘WHERE’ Clause

Laravel Query Builder: Using ‘WHERE’ Clause

Last updated: January 16, 2024

Introduction

Laravel, the popular PHP framework for web development, offers an elegant database query builder that simplifies the task of interacting with databases. Whether you’re dealing with complex queries or simple data retrieval tasks, Laravel’s query builder provides a fluent, object-oriented interface. In this tutorial, we’ll dive into one of the most fundamental aspects of database queries: the WHERE clause. We’ll explore how you can leverage it using Laravel’s Query Builder to filter data with precision and ease.

Getting Started

To begin using the WHERE clause in Laravel, it’s essential to first set up a new Laravel project, configure your database settings in your .env file, and create models and migrations for your tables. Once these prerequisites are in place, you can start crafting queries using the Query Builder.

Here’s a basic example of a WHERE clause in Laravel:

$users = DB::table('users')->where('active', 1)->get();

This code will retrieve all records from the users table where the active column is equal to 1.

Comparisons in the WHERE Clause

Quite often, you will need to use comparison operators within your WHERE clauses. Laravel’s Query Builder supports a variety of comparison operations:

  • Equal: =
  • Not Equal: <> or !=
  • Greater Than: >
  • Less Than: <
  • Greater Than or Equal to: >=
  • Less Than or Equal to: <=

Here are some code examples demonstrating the use of these operators:

$users = DB::table('users')->where('votes', '>', 100)->get();

$posts = DB::table('posts')->where('created_at', '<=', now()->subDays(7))->get();

The first query fetches users with more than 100 votes, and the second retrieves posts created in the last seven days.

AND/OR Predicates

You can chain together multiple WHERE clauses to create more complex conditions using AND and OR predicates.

$users = DB::table('users')
    ->where('status', 'approved')
    ->where('created_at', '>', now()->subYear())
    ->get();

$posts = DB::table('posts')
    ->where('title', '=', 'Laravel Tips')
    ->orWhere('content', 'LIKE', '%laravel%')
    ->get();

The first query will return approved users created within the past year, while the second query selects posts with the title ‘Laravel Tips’ or containing ‘laravel’ in their content.

Where Clauses with Arrays

Laravel permits concise array-syntax for WHERE conditions. Below is an example:

$users = DB::table('users')->where([
    ['status', '=', 'active'],
    ['created_at', '>', now()->subMonth()]
])->get();

This neatly combines multiple conditions in a single where clause, helping to keep code clean and readable.

Advanced Where Clauses

For more complex situations, Laravel provides additional where clause methods such as whereBetween, whereNotBetween, whereIn, whereNotIn, whereNull, whereNotNull, and many more. Some examples include:

// Where Between
$users = DB::table('users')->whereBetween('votes', [1, 100])->get();

// Where Not In
$posts = DB::table('posts')->whereNotIn('id', [1, 2, 3])->get();

By using these methods you can craft queries to accommodate a wide spectrum of conditions without resorting to writing plain SQL statements.

Subqueries in WHERE Clauses

For the most complex of querying needs, subqueries can be utilized. Laravel’s Query Builder makes this seemingly daunting task more manageable. Below is one way to include subqueries in your WHERE clause:

$users = DB::table('users')->whereExists(function ($query) {
    $query->select(DB::raw(1))
         ->from('orders')
         ->whereRaw('orders.user_id = users.id')
         ->where('status', '=', 'Approved');
})->get();

This snippet retrieves all users who have at least one ‘Approved’ order.

Conclusion

Working with Where clauses in Laravel’s Query Builder is not only powerful but also incredibly intuitive, offering developers an expressive syntax to handle database queries of all complexities. By building upon these foundational concepts, you’ll be able to manage data retreaval with great flexibility and precision, enhancing both the performance and maintainability of your Laravel applications.

Next Article: Laravel Query Builder: Using ‘AND’ and ‘OR’ Operators

Previous Article: Laravel Query Builder: Select Distinct Records

Series: Laravel & Eloquent Tutorials

PHP

You May Also Like

  • Pandas DataFrame.value_counts() method: Explained with examples
  • Constructor Property Promotion in PHP: Tutorial & Examples
  • Understanding mixed types in PHP (5 examples)
  • Union Types in PHP: A practical guide (5 examples)
  • PHP: How to implement type checking in a function (PHP 8+)
  • Symfony + Doctrine: Implementing cursor-based pagination
  • Laravel + Eloquent: How to Group Data by Multiple Columns
  • PHP: How to convert CSV data to HTML tables
  • Using ‘never’ return type in PHP (PHP 8.1+)
  • Nullable (Optional) Types in PHP: A practical guide (5 examples)
  • Explore Attributes (Annotations) in Modern PHP (5 examples)
  • An introduction to WeakMap in PHP (6 examples)
  • Type Declarations for Class Properties in PHP (5 examples)
  • Static Return Type in PHP: Explained with examples
  • PHP: Using DocBlock comments to annotate variables
  • PHP: How to ping a server/website and get the response time
  • PHP: 3 Ways to Get City/Country from IP Address
  • PHP: How to find the mode(s) of an array (4 examples)
  • PHP: Calculate standard deviation & variance of an array