Generate Dynamic Query Columns in Laravel Using addSelect()
In Laravel, sometimes you need extra calculated data directly in query results.
Examples:
- Last login time
- Total orders
- Latest payment date
Instead of:
- Extra loops
- Multiple queries
- Raw SQL
Laravel allows you to use addSelect() cleanly.
Basic Usage
User::query()
->addSelect([
'total_orders' => Order::query()
->selectRaw('COUNT(*)')
->whereColumn('orders.user_id', 'users.id')
])
->get();
Result
Each user now contains:
$user->total_orders
Without additional queries.
Real Project Example
Get latest login timestamp:
User::query()
->addSelect([
'last_login_at' => LoginLog::query()
->select('created_at')
->whereColumn('login_logs.user_id', 'users.id')
->latest()
->limit(1)
])
->get();
Why addSelect() Is Powerful
It helps you:
- Build dynamic query columns
- Avoid N+1 calculations
- Reduce query complexity
- Keep queries expressive
When to Use It
Use addSelect() when:
- Building dashboards
- Fetching aggregate data
- Optimizing reporting queries
- Adding computed columns