📖 Scenario: You are building a small Laravel application to manage a bookstore's inventory. You want to fetch books based on different conditions like price, author, and availability. Using Laravel's Query Builder will help you write flexible and readable database queries.
🎯 Goal: Build a Laravel Query Builder example that shows how to flexibly fetch books from the database using different conditions and chaining methods.
📋 What You'll Learn
Create a $books variable with a base query selecting from the books table
Add a configuration variable $maxPrice to filter books cheaper than this price
Use Query Builder methods to filter books where price is less than $maxPrice and available is true
Complete the query by ordering the results by title ascending
💡 Why This Matters
🌍 Real World
Query Builder helps developers write database queries that are easy to read, modify, and maintain without writing raw SQL. This flexibility is useful in real applications where query conditions change based on user input or business rules.
💼 Career
Understanding Query Builder is essential for Laravel developers to build efficient and secure database interactions. It improves productivity and reduces errors compared to raw SQL queries.
Progress0 / 4 steps
1
DATA SETUP: Create base query for books
Create a variable called $books and set it to a Query Builder instance selecting from the books table using DB::table('books').
Laravel
Hint
Use DB::table('books') to start the query.
2
CONFIGURATION: Define maximum price filter
Add a variable called $maxPrice and set it to 20 to use as a price filter.
Laravel
Hint
Just create a variable $maxPrice and assign it the number 20.
3
CORE LOGIC: Add filters using Query Builder methods
Use the where method on $books to filter where price is less than $maxPrice and where available is true. Chain these methods to $books.
Laravel
Hint
Chain two where calls on $books to filter by price and availability.
4
COMPLETION: Order results by title ascending
Complete the query by chaining the orderBy method on $books to sort results by title in ascending order.
Laravel
Hint
Use orderBy('title', 'asc') chained to $books.
Practice
(1/5)
1. Why does Laravel's Query Builder offer more flexibility compared to writing raw SQL queries?
easy
A. Because it allows building queries step-by-step and modifying them easily
B. Because it only supports simple SELECT statements
C. Because it requires writing raw SQL for every query
D. Because it does not protect against SQL injection
Solution
Step 1: Understand Query Builder's design
Query Builder lets you build queries piece by piece, adding conditions or joins as needed.
Step 2: Compare with raw SQL
Raw SQL requires writing the full query at once and is harder to modify dynamically.
Final Answer:
Because it allows building queries step-by-step and modifying them easily -> Option A
Quick Check:
Step-by-step building = Flexibility [OK]
Hint: Think: step-by-step building means easy changes [OK]
Common Mistakes:
Assuming Query Builder only supports simple queries
Thinking raw SQL is easier to modify dynamically
Believing Query Builder requires raw SQL for all queries
2. Which of the following is the correct syntax to start a Query Builder query in Laravel?
easy
A. $users = DB->table('users')->get();
B. $users = DB::table('users')->get();
C. $users = DB::table['users']->get();
D. $users = DB.table('users').get();
Solution
Step 1: Identify correct method call syntax
Laravel uses double colon :: for static method calls like DB::table('users').
Step 2: Check method chaining
Method chaining uses -> to call get() after table().
Final Answer:
$users = DB::table('users')->get(); -> Option B
Quick Check:
Static call with :: and chaining with -> [OK]
Hint: Remember: DB::table() then ->get() for queries [OK]
Common Mistakes:
Using -> instead of :: for static calls
Using square brackets [] instead of parentheses ()
Using dot notation like DB.table
3. What will be the output of this Laravel Query Builder code?
C. Adding where after get() does not affect the executed query
D. You cannot chain where() methods in Query Builder
Solution
Step 1: Understand when query executes
Query executes when get() is called, returning results immediately.
Step 2: Check effect of where after get()
Adding where after get() changes the builder but does not affect already executed query.
Final Answer:
Adding where after get() does not affect the executed query -> Option C
Quick Check:
Query runs at get(), later changes don't affect results [OK]
Hint: Query runs at get(); changes after don't affect results [OK]
Common Mistakes:
Thinking get() just prepares query without running
Believing where() can't be chained
Assuming DB::table() after get() is valid
5. You want to build a query that optionally filters users by city only if a city is provided. Which Query Builder approach offers the most flexibility?
hard
A. Start with DB::table('users') and add ->where('city', $city) only if $city is not empty
B. Write raw SQL with city condition always included
C. Use DB::table('users')->where('city', $city) without checking if $city exists
D. Build the query with all conditions hardcoded before execution
Solution
Step 1: Understand conditional query building
Query Builder lets you add conditions only when needed, making queries flexible.
Step 2: Compare options
Adding where condition only if $city exists avoids unnecessary filters and errors.
Final Answer:
Start with DB::table('users') and add ->where('city', $city) only if $city is not empty -> Option A
Quick Check:
Conditional where = flexible queries [OK]
Hint: Add where condition only if filter value exists [OK]
Common Mistakes:
Including conditions without checking if values exist
Using raw SQL losing flexibility and safety
Hardcoding all conditions before execution
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.