📖 Scenario: You are building a Laravel application that needs to query a database table called products. You want to select products with a price greater than a certain value, but also want to use a raw SQL expression to calculate a discounted price on the fly.
🎯 Goal: Build a Laravel query using raw expressions to calculate a discounted price for products and filter products by price.
📋 What You'll Learn
Create a products array with sample product data
Define a minPrice variable to filter products
Use Laravel's DB::raw() to calculate a discounted price
Write a query that selects product name and discounted price
Filter products where price is greater than minPrice
💡 Why This Matters
🌍 Real World
Raw expressions let you write custom SQL inside Laravel queries, useful for calculations or database-specific functions not directly supported by Laravel's query builder.
💼 Career
Understanding raw expressions is important for backend developers working with Laravel to optimize queries and implement complex database logic efficiently.
Progress0 / 4 steps
1
Create the products data array
Create a PHP array called products with these exact entries: ['name' => 'Laptop', 'price' => 1200], ['name' => 'Phone', 'price' => 800], and ['name' => 'Tablet', 'price' => 600].
Laravel
Hint
Use a PHP array with associative arrays for each product.
2
Define the minimum price filter
Create a variable called minPrice and set it to 700 to filter products with price greater than this value.
Laravel
Hint
Just assign 700 to a variable named minPrice.
3
Write the query with raw discounted price
Write a Laravel query using DB::table('products') that selects name and a raw expression for discounted price as price * 0.9 named discounted_price. Use DB::raw() for the raw expression. Filter products where price is greater than minPrice.
Laravel
Hint
Use DB::raw('price * 0.9 as discounted_price') inside select() and filter with where('price', '>', $minPrice).
4
Complete the query by getting results
Complete the query by calling get() on the $query variable to retrieve the filtered products with discounted prices.
Laravel
Hint
Call get() on $query and assign to $results.
Practice
(1/5)
1. What is the primary purpose of using DB::raw() in Laravel queries?
easy
A. To insert raw SQL expressions directly into the query builder
B. To automatically escape all user inputs
C. To convert Eloquent models into arrays
D. To cache query results for faster access
Solution
Step 1: Understand the role of DB::raw()
DB::raw() allows you to write raw SQL expressions inside Laravel's query builder without modification.
Step 2: Compare with other options
Options B, C, and D describe different Laravel features unrelated to raw SQL expressions.
Final Answer:
To insert raw SQL expressions directly into the query builder -> Option A
Quick Check:
DB::raw() = raw SQL insertion [OK]
Hint: DB::raw() means write SQL exactly as is inside queries [OK]
Common Mistakes:
Thinking DB::raw() escapes inputs automatically
Confusing DB::raw() with model conversion
Assuming DB::raw() caches queries
2. Which of the following is the correct syntax to use DB::raw() in a Laravel query builder to select the current date?
easy
A. DB::table('users')->select(DB::raw('CURRENT_DATE'))->get();
B. DB::table('users')->select('CURRENT_DATE')->get();
C. DB::table('users')->selectRaw('CURRENT_DATE')->get();
D. DB::table('users')->selectRaw(DB::raw('CURRENT_DATE'))->get();
Solution
Step 1: Identify correct raw expression usage
DB::raw() wraps the raw SQL string inside select() to insert it as is.
Step 2: Analyze other options
DB::table('users')->select('CURRENT_DATE')->get(); treats 'CURRENT_DATE' as a column name, not raw SQL. DB::table('users')->selectRaw('CURRENT_DATE')->get(); uses selectRaw() correctly but without DB::raw(), which is valid but not the exact syntax asked. DB::table('users')->selectRaw(DB::raw('CURRENT_DATE'))->get(); nests DB::raw() inside selectRaw(), which is incorrect.
Final Answer:
DB::table('users')->select(DB::raw('CURRENT_DATE'))->get(); -> Option A
Quick Check:
Use DB::raw() inside select() for raw SQL [OK]
Hint: Use DB::raw('SQL') inside select() for raw SQL [OK]
Common Mistakes:
Using select() with string instead of DB::raw()
Confusing selectRaw() and DB::raw() usage
Nesting DB::raw() inside selectRaw() incorrectly
3. What will be the output of the following Laravel query?
DB::table('orders')
->select('id', DB::raw('price * quantity AS total'))
->where('status', 'completed')
->get();
medium
A. An empty collection because raw expressions are not supported in where clauses
B. A syntax error because raw expressions cannot have aliases
C. A collection of orders with id and a calculated total price (price * quantity)
D. A collection with only id and price fields, ignoring quantity
Solution
Step 1: Understand the select with DB::raw()
The query selects 'id' and a raw SQL expression calculating 'price * quantity' as 'total'. This is valid and returns those fields.
Step 2: Check the where clause and output
The where clause filters orders with status 'completed'. The output is a collection of matching orders with 'id' and 'total' fields.
Final Answer:
A collection of orders with id and a calculated total price (price * quantity) -> Option C
Quick Check:
DB::raw() with alias returns calculated fields [OK]
Hint: DB::raw() can calculate fields with aliases in select [OK]
Common Mistakes:
Thinking raw expressions cannot have aliases
Assuming raw expressions affect where clause support
Ignoring the calculated field in output
4. Identify the error in this Laravel query using raw expressions:
A. Raw expressions cannot be used inside where clauses
B. The syntax is correct; no error present
C. DB::raw() should be wrapped inside a closure for where
D. The comparison operator '>' is invalid in this context
Solution
Step 1: Review usage of DB::raw() in where clause
Using DB::raw() inside where to apply SQL functions like LENGTH() is valid syntax in Laravel.
Step 2: Check operators and syntax
The '>' operator is valid for comparison. No wrapping closure is required here.
Final Answer:
The syntax is correct; no error present -> Option B
Quick Check:
DB::raw() works in where clauses with operators [OK]
Hint: DB::raw() can be used directly in where with operators [OK]
Common Mistakes:
Assuming raw expressions are disallowed in where
Thinking a closure is needed for DB::raw() in where
Misunderstanding comparison operator validity
5. You want to update all users' scores by adding 10 points using a raw SQL expression in Laravel. Which code snippet correctly achieves this safely?
hard
A. DB::table('users')->update(DB::raw('score = score + 10'));
B. DB::table('users')->update(['score' => 'score + 10']);
C. DB::table('users')->updateRaw('score = score + 10');
D. DB::table('users')->update(['score' => DB::raw('score + 10')]);
Solution
Step 1: Understand how to update with raw expressions
To update a column by adding a value, use DB::raw() inside the update array to write the SQL expression.
Step 2: Analyze each option
DB::table('users')->update(['score' => DB::raw('score + 10')]); correctly uses DB::raw('score + 10') as the new value. DB::table('users')->update(['score' => 'score + 10']); treats it as a string, not SQL. DB::table('users')->update(DB::raw('score = score + 10')); passes DB::raw() directly to update(), which expects an array, causing error. DB::table('users')->updateRaw('score = score + 10'); uses a non-existent updateRaw() method.
Final Answer:
DB::table('users')->update(['score' => DB::raw('score + 10')]); -> Option D
Quick Check:
Use DB::raw() inside update array for calculations [OK]
Hint: Use DB::raw() inside update array for arithmetic updates [OK]
Common Mistakes:
Passing raw SQL as string without DB::raw()
Calling non-existent updateRaw() method
Passing DB::raw() directly instead of in array
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.