Generate Dynamic Query Columns in Laravel Using addSelect()

Add calculated values to your queries without writing messy raw SQL

  • 05 May, 2026
  • 14 Views

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

Share: