aghabalaguluzade DB:raw raw SQL kullanmak gerektiğinde kullanılır. Mesela PostgreSQL'de UTC tuttuğunuz bir tarihi Türkiye saatine dönüştürüp almak için:
DB::table('users')->select([
'id',
'name',
DB::raw("created_at AT TIME ZONE 'utc' AT TIME ZONE 'Europe/Istanbul'")
])
->get();
Doğal olarak Laravel'de bunu yapan bir Builder yöntemi olmadığı için raw query yazmak zorundasınız.
DB::raw() parameter binding desteklemez. Şunu yapamazsınız:
DB::raw("created_at AT TIME ZONE 'utc' AT TIME ZONE ?", [
$request->input('timezone')
])
O yüzden böyle bir işlem yapmanız gerekiyorsa güvenlik sebebiyle DB::raw kullanmamanız lazım. Zaten biri şunu yapıyorsa ona şimdiden geçmiş olsun:
DB::raw("created_at AT TIME ZONE 'utc' AT TIME ZONE ".$request->input('timezone'));
Bunun yerine selectRaw, whereRaw, orderByRaw gibi parameter binding destekleyen raw yöntemler kullanılmalı.
Bu anlattıklarımdan sonra kullanmanın üstünlüğüne de cevap vermiş oldum sanırım.