📖 Scenario: You are building a simple product listing page for an online store. You want to show only products that meet certain conditions, like being in stock or having a price below a certain amount.
🎯 Goal: Build a Laravel query using where clauses to filter products by stock availability and price.
📋 What You'll Learn
Create a products array with product details
Add a variable maxPrice to set the price limit
Use Laravel's where clauses to filter products by in_stock and price
Return the filtered products collection
💡 Why This Matters
🌍 Real World
Filtering data like products or users based on conditions is common in web apps to show relevant information.
💼 Career
Understanding Laravel's where clauses helps you build efficient database queries and data filtering in real projects.
Progress0 / 4 steps
1
Create the products array
Create a variable called products as a Laravel collection containing these exact products: ['name' => 'Laptop', 'price' => 1200, 'in_stock' => true], ['name' => 'Mouse', 'price' => 25, 'in_stock' => true], ['name' => 'Keyboard', 'price' => 75, 'in_stock' => false], and ['name' => 'Monitor', 'price' => 300, 'in_stock' => true].
Laravel
Hint
Use collect([]) to create a Laravel collection with the given product arrays inside.
2
Set the maximum price filter
Create a variable called maxPrice and set it to 100 to filter products cheaper than this price.
Laravel
Hint
Just create a simple variable $maxPrice and assign the number 100.
3
Filter products using where clauses
Use Laravel collection where clauses on $products to filter only products where in_stock is true and price is less than $maxPrice. Save the result in a variable called filteredProducts.
Laravel
Hint
Chain two where calls on $products. First filter in_stock equals true, then filter price less than $maxPrice.
4
Return the filtered products
Return the $filteredProducts collection so it can be used to display the filtered product list.
Laravel
Hint
Use return $filteredProducts; to send back the filtered collection.
Practice
(1/5)
1. What does the where clause do in a Laravel query?
easy
A. It sorts records in ascending order.
B. It filters records based on a condition.
C. It deletes records from the database.
D. It joins two tables together.
Solution
Step 1: Understand the purpose of where clause
The where clause is used to filter database records by specifying conditions.
Step 2: Compare with other options
Sorting, deleting, and joining are different operations not done by where.
Final Answer:
It filters records based on a condition. -> Option B
Quick Check:
Where clause = filter condition [OK]
Hint: Where means filter records by condition [OK]
Common Mistakes:
Confusing where with orderBy for sorting
Thinking where deletes records
Mixing where with join operations
2. Which of the following is the correct syntax to get users with age 25 using Laravel's query builder?
easy
A. User::where('age' => 25)->get();
B. User::where('age' == 25)->get();
C. User::where(age, 25)->get();
D. User::where('age', '=', 25)->get();
Solution
Step 1: Recall correct where syntax
The correct syntax uses three parameters: column, operator, value. Operator '=' is optional but valid.
Step 2: Check each option
User::where('age', '=', 25)->get(); uses correct syntax. User::where('age' == 25)->get(); uses '==' inside where which is invalid. User::where(age, 25)->get(); uses unquoted column name causing undefined constant. User::where('age' => 25)->get(); uses '=>' which is wrong.
Final Answer:
User::where('age', '=', 25)->get(); -> Option D
Quick Check:
Correct where syntax = User::where('age', '=', 25)->get(); [OK]
Hint: Use where('column', '=', value) for filtering [OK]
Chaining multiple where clauses applies AND logic between conditions.
Step 2: Analyze the conditions
It filters products where price is greater than 100 AND stock is at least 10.
Final Answer:
All products with price > 100 and stock >= 10 -> Option A
Quick Check:
Multiple where = AND filter [OK]
Hint: Multiple where clauses combine with AND logic [OK]
Common Mistakes:
Assuming where clauses combine with OR by default
Thinking multiple where cause syntax error
Confusing comparison operators
4. Identify the error in this Laravel query:
User::where('status', 'active')->get();
medium
A. Missing semicolon at the end
B. Incorrect method name, should be filter
C. No error, query is correct
D. Missing operator in where clause
Solution
Step 1: Check where clause parameters
The where method accepts two parameters: column and value (assumes =), or three: column, operator, value.
Step 2: Analyze the query
User::where('status', 'active')->get(); uses two parameters correctly, assuming status = 'active'.
Final Answer:
No error, query is correct -> Option C
Quick Check:
where needs column and value or operator [OK]
Hint: where needs column and value or operator [OK]
Common Mistakes:
Thinking where always requires explicit operator
Confusing method names like filter instead of where
Ignoring Laravel's default operator '=' behavior
5. How would you write a Laravel query to get all orders where the status is 'completed' and the total is greater than 500, but only if the user is an admin? Assume you have a variable $isAdmin that is true or false.
hard
A. Order::when($isAdmin, fn($q) => $q->where('status', 'completed')->where('total', '>', 500))->get();
B. Order::where('status', 'completed')->where('total', '>', 500)->get();
C. Order::if($isAdmin)->where('status', 'completed')->where('total', '>', 500)->get();
D. Order::where('status', 'completed' && $isAdmin)->where('total', '>', 500)->get();
Solution
Step 1: Understand conditional queries in Laravel
Laravel's when method allows adding conditions only if a boolean is true.
Step 2: Analyze each option
Order::when($isAdmin, fn($q) => $q->where('status', 'completed')->where('total', '>', 500))->get(); uses when correctly to add where clauses only if $isAdmin is true. Order::where('status', 'completed')->where('total', '>', 500)->get(); always applies filters. Order::if($isAdmin)->where('status', 'completed')->where('total', '>', 500)->get(); uses invalid if method. Order::where('status', 'completed' && $isAdmin)->where('total', '>', 500)->get(); has wrong syntax mixing boolean and string.
Final Answer:
Order::when($isAdmin, fn($q) => $q->where('status', 'completed')->where('total', '>', 500))->get(); -> Option A
Quick Check:
Use when() for conditional where clauses [OK]
Hint: Use when() to add where only if condition true [OK]
Common Mistakes:
Applying where clauses unconditionally
Using non-existent if() method on query builder
Incorrect syntax mixing booleans inside where
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.