class Laravel Raw SQL Kullanımı extends Post

@created_at( "2025-01-15 13:52" ) @tag( "rawsql" )
### Laravel, veritabanı işlemleri için güçlü bir Query Builder ve Eloquent ORM sunar. Ancak bazı durumlarda, doğrudan SQL sorguları çalıştırmanız gerekebilir. Bu ihtiyaçlar için Laravel, Raw SQL kullanımı sağlar. --- ### Raw SQL Avantajları ve Dezavantajları #### Avantajlar: - Karmaşık SQL sorgularını kolayca çalıştırabilirsiniz. - ORM ve Query Builder'ın sağladığı soyutlamayı atlayarak doğrudan performanslı sorgular yazabilirsiniz. - Özellikle, optimize edilmiş SQL fonksiyonları veya işlemleri gerektiğinde kullanışlıdır. #### Dezavantajlar: - Kodun okunabilirliği azalabilir. - SQL enjeksiyonu riskine karşı dikkatli olunmalıdır. - Eloquent'in sağladığı birçok kolaylıktan faydalanamazsınız. --- ### Raw SQL Kullanım Yöntemleri #### 1. **select() ile Raw SQL Çalıştırma** Laravel'in `DB` sınıfını kullanarak doğrudan SQL sorguları çalıştırabilirsiniz.
use Illuminate\Support\Facades\DB;

$users = DB::select('SELECT * FROM users WHERE active = ?', [1]);

foreach ($users as $user) {
    echo $user->name;
}
#### 2. **insert() ve update() ile Veri İşleme** Raw SQL ile veri eklemek veya güncellemek için `insert` ve `update` metotlarını kullanabilirsiniz. - **Veri Ekleme:**
DB::insert('INSERT INTO users (name, email) VALUES (?, ?)', ['John Doe', 'john@example.com']);
- **Veri Güncelleme:**
DB::update('UPDATE users SET active = ? WHERE id = ?', [1, 42]);
#### 3. **delete() ile Veri Silme** Raw SQL sorgusu ile kayıtları silebilirsiniz.
DB::delete('DELETE FROM users WHERE id = ?', [42]);
#### 4. **statement() ile Herhangi Bir SQL Çalıştırma** `statement` metodu ile herhangi bir SQL ifadesini çalıştırabilirsiniz.
DB::statement('DROP TABLE test_table');
--- ### Raw Expressions (Ham İfadeler) Raw ifadeler, Laravel'in Query Builder ile kullanabileceğiniz bir yöntemdir. Örneğin:
use Illuminate\Support\Facades\DB;

$users = DB::table('users')
            ->select(DB::raw('COUNT(*) as user_count, active'))
            ->groupBy('active')
            ->get();
Bu yöntemde, ham ifadeleri Query Builder ile birleştirerek daha esnek sorgular yazabilirsiniz. --- ### SQL Enjeksiyonu ve Güvenlik Raw SQL kullanırken SQL enjeksiyonu riskine karşı dikkatli olmalısınız. Parametre bağlama kullanarak bu riskleri en aza indirebilirsiniz. Güvensiz sorgu:
$users = DB::select("SELECT * FROM users WHERE name = '$name'");
Güvenli sorgu:
$users = DB::select('SELECT * FROM users WHERE name = ?', [$name]);
--- ### Logging Raw SQL Queries Laravel, çalıştırılan SQL sorgularını loglama özelliğine sahiptir. `DB::listen` metodu ile sorguları görüntüleyebilirsiniz.
DB::listen(function ($query) {
    echo $query->sql;
    echo implode(", ", $query->bindings);
    echo $query->time;
});
--- ### Özet Laravel'de Raw SQL, Query Builder ve Eloquent'in ötesinde esneklik sunar. Performansın önemli olduğu veya karmaşık sorguların gerektiği durumlarda kullanabilirsiniz. Ancak, güvenlik önlemlerine dikkat etmeli ve mümkün olduğunca Query Builder veya Eloquent kullanmayı tercih etmelisiniz.