In Laravel 11, the `where` clause is used to filter query results based on specific conditions. You can use the `where` method in both the Query Builder and Eloquent ORM. Below are examples of how to use the `where` clause in various scenarios.
1. Basic `where` Clause
The simplest form of the `where` clause checks for equality.
Example:
<?php use App\Models\User; // Get users where the 'status' is 'active' $users = User::where('status', 'active')->get(); ?>
Explanation:
`where(‘status’, ‘active’)`: Filters records where the `status` column equals `’active’`.
`get()`: Executes the query and retrieves the results.
2. `where` with Operators
You can use comparison operators like `>`, `<`, `>=`, `<=`, `!=`, etc.
Example:
<?php use App\Models\Product; // Get products where the price is greater than 100 $products = Product::where('price', '>', 100)->get(); ?>
Explanation:
`where(‘price’, ‘>’, 100)`: Filters records where the `price` column is greater than `100`.
3. Multiple `where` Conditions
You can chain multiple `where` conditions to apply multiple filters.
Example:
<?php use App\Models\Order; // Get orders where status is 'completed' and total_amount is greater than 500 $orders = Order::where('status', 'completed') ->where('total_amount', '>', 500) ->get(); ?>
Explanation:
Multiple `where` conditions are combined using `AND` logic.
4. `orWhere` Clause
Use `orWhere` to apply `OR` logic between conditions.
Example:
<?php use App\Models\User; // Get users where status is 'active' OR role is 'admin' $users = User::where('status', 'active') ->orWhere('role', 'admin') ->get(); ?>
Explanation:
– `orWhere(‘role’, ‘admin’)`: Adds an `OR` condition to the query.
5. `where` with Arrays
You can pass an array of conditions to the `where` method.
Example:
<?php use App\Models\User; // Get users where status is 'active' and role is 'user' $users = User::where([ ['status', '=', 'active'], ['role', '=', 'user'], ])->get(); ?>
Explanation:
The array syntax is useful for applying multiple `AND` conditions in a single `where` call.
6. `where` with `NULL` and `NOT NULL`
You can check for `NULL` or `NOT NULL` values.
Example:
<?php use App\Models\Post; // Get posts where the 'deleted_at' column is NULL $posts = Post::whereNull('deleted_at')->get(); // Get posts where the 'deleted_at' column is NOT NULL $posts = Post::whereNotNull('deleted_at')->get(); ?>
7. `where` with `IN` and `NOT IN`
You can filter records where a column’s value is in a list of values.
Example:
<?php use App\Models\User; // Get users where the role is either 'admin' or 'editor' $users = User::whereIn('role', ['admin', 'editor'])->get(); // Get users where the role is neither 'admin' nor 'editor' $users = User::whereNotIn('role', ['admin', 'editor'])->get(); ?>
8. `where` with `BETWEEN`
You can filter records where a column’s value is between two values.
Example:
<?php use App\Models\Product; // Get products where the price is between 100 and 500 $products = Product::whereBetween('price', [100, 500])->get(); ?>
9. `where` with Dates
You can filter records based on date columns.
Example:
<?php use App\Models\Order; // Get orders created on a specific date $orders = Order::whereDate('created_at', '2023-10-01')->get(); // Get orders created in the last 7 days $orders = Order::where('created_at', '>=', now()->subDays(7))->get(); ?>
10. Dynamic `where` Clauses
You can use dynamic `where` methods for cleaner syntax.
Example:
<?php use App\Models\User; // Get users where the 'age' column is greater than 30 $users = User::whereAge(30)->get(); // Get users where the 'status' column is 'active' $users = User::whereStatus('active')->get(); ?>
Explanation:
– Laravel dynamically resolves methods like `whereAge` or `whereStatus` based on the column name.
11. `where` with Subqueries
You can use subqueries in `where` clauses.
Example:
<?php use App\Models\User; use App\Models\Order; // Get users who have placed at least one order $users = User::whereExists(function ($query) { $query->select(DB::raw(1)) ->from('orders') ->whereColumn('orders.user_id', 'users.id'); })->get(); ?>
12. `where` with JSON Columns
If you’re using JSON columns, you can query nested data.
Example:
<?php use App\Models\User; // Get users where the 'options->language' is 'en' $users = User::where('options->language', 'en')->get(); ?>
13. `where` with Raw Expressions
For complex conditions, you can use raw SQL expressions.
Example:
<?php use App\Models\User; // Get users where the 'email' column matches a pattern $users = User::whereRaw('email LIKE ?', ['%@example.com'])->get(); ?>
14. `where` with Eloquent Relationships
You can use `where` with relationships.
Example:
<?php use App\Models\User; // Get users who have at least one post $users = User::whereHas('posts')->get(); // Get users who have at least one post with the status 'published' $users = User::whereHas('posts', function ($query) { $query->where('status', 'published'); })->get(); ?>