---
title: "selectRaw() для обчислюваних колонок"
url: https://laravelukraine.com/blog/selectraw-dlia-obcisliuvanix-kolonok
author: "Олексій Бабінцев"
date: 2026-07-01
---

# selectRaw() для обчислюваних колонок

Потрібні обчислені колонки без завантаження повних моделей?

`selectRaw()` робить обчислення на рівні SQL.
База даних обробляє. Повертає тільки результати.

**Поширене використання:**

- Ціна з податком
- Вік з дати народження
- Обчислення відстані
- Об'єднані рядки

**Виграш продуктивності:**

База даних робить математику. Не PHP.
Повертає тільки те що потрібно.

Порада: Завжди використовувати parameter binding щоб запобігти SQL ін'єкції.

```php
// Обчислення на стороні бази даних
$products = Product::selectRaw('
    id,
    name,
    price,
    price * 1.2 as price_with_tax,
    price * quantity as total
')->get();

// Обчислення віку
$users = User::selectRaw('
    id,
    name,
    YEAR(CURDATE()) - YEAR(birthdate) as age
')->get();

// Конкатенація
$users = User::selectRaw("
    CONCAT(first_name, ' ', last_name) as full_name,
    email
")->get();

// Безпечний parameter binding
$taxRate = 1.15;
$products = Product::selectRaw(
    'price * ? as price_with_tax',
    [$taxRate]
)->get();
```

```php
// Обчислення відстані
$lat = 40.7128;
$lng = -74.0060;

$stores = Store::selectRaw("
    *,
    (6371 * acos(cos(radians(?))
    * cos(radians(lat))
    * cos(radians(lng) - radians(?))
    + sin(radians(?))
    * sin(radians(lat)))) AS distance
", [$lat, $lng, $lat])
    ->having('distance', '<', 10)
    ->orderBy('distance')
    ->get();

// Складні обчислення з декількома параметрами
$discount = 0.1;
$minPrice = 100;

$items = Product::selectRaw('
    id,
    name,
    price,
    price * (1 - ?) as discounted_price,
    CASE WHEN price > ? THEN "premium" ELSE "standard" END as tier
', [$discount, $minPrice])->get();
```
