DB::raw() - коли Eloquent недостатньо
Потрібен складний SQL? Функції дат? Математичні операції?
Eloquent має межі. DB::raw() дозволяє писати сирий SQL всередині запитів.
Поширені випадки використання:
- Функції дати/часу
- Математичні операції
- Специфічні для бази даних функції
- Складна агрегація
Попередження безпеки:
Ніколи не передавай вхідні дані користувача безпосередньо в raw(). Використовувати біндінги.
Порада: Розглянь власні query scopes щоб повторно використовувати складні raw вирази.
// Функції дат
$users = User::where('created_at', '>=',
DB::raw('DATE_SUB(NOW(), INTERVAL 30 DAY)')
)->get();
// Математичні операції
$products = Product::select('*',
DB::raw('price * quantity as total')
)->get();
// CASE вирази
$posts = Post::select('*',
DB::raw('CASE WHEN views > 1000 THEN "popular"
ELSE "regular" END as status')
)->get();
// Агрегація з групуванням
$stats = Order::select(
DB::raw('DATE(created_at) as date'),
DB::raw('SUM(total) as revenue'),
DB::raw('COUNT(*) as orders')
)
->groupBy('date')
->get();
// БЕЗПЕЧНО: Використання біндінгів
$status = 'published';
Post::whereRaw('LOWER(status) = ?', [strtolower($status)])->get();