Doctrine QueryBuilder Kılavuzu
Bu kılavuz, Doctrine QueryBuilder ile çalışırken kullanabileceğiniz temel yöntemleri ve en iyi uygulamaları içermektedir. Aşağıdaki bölümler, SELECT, JOIN, WHERE gibi komutlardan daha karmaşık CTE, UNION, ve önbellekleme gibi konulara kadar geniş bir yelpazeyi kapsamaktadır. İşte detaylar:
İçerik Başlıkları:
- SELECT: Alan seçim ve DISTINCT seçenekleri;
- FROM & JOIN: Tablo ayarı ve join türleri (
INNER,LEFT,RIGHT); - WHERE/HAVING:
AND/ORmantığı ile koşullar; - GROUP/ORDER: Gruplama ve sıralama, sıfırlama kontrolleriyle;
- CRUD:
INSERT,UPDATE,DELETEişlemleri; - Advanced:
UNION, CTE,LIMIT/OFFSET, önbellekleme.
1. SELECT
select(string ...$expressions) — SELECT alanlarını tanımlar, önceki seçimleri geçersiz kılar.
// SELECT u.id, u.name, u.email FROM ...
$qb->select('u.id', 'u.name', 'u.email');
addSelect(string $expression, string ...$expressions) — Mevcut SELECT ifadesine alanlar ekler.
// SELECT u.id, p.title, p.content FROM ...
$qb->select()->addSelect(, );
distinct(bool $distinct = true) — Tekrar eden satırların ortadan kaldırılması için DISTINCT ekler.
// SELECT DISTINCT u.city FROM ...
$qb->select()->distinct();
2. FROM & JOIN
from(string $table, ?string $alias = null) — FROM ifadesinde ana tabloyu tanımlar ve isteğe bağlı olarak bir takma ad atar.
// FROM users u
$qb->from(, );
join(string $fromAlias, string $join, string $alias, ?string $condition = null) — Tablolar arasında INNER JOIN oluşturur ve sadece her iki tarafta eşleşen satırları döndürür.
// INNER JOIN posts p ON p.user_id = u.id
$qb->from(, )->join(, , , );
3. WHERE/HAVING
where(string|CompositeExpression $predicate, ...$predicates) — Yeni koşullarla WHERE ifadesini tamamen ayarlar veya değiştirir.
// WHERE u.active = 1 AND u.role="admin"
$qb->select()
->from(, )
->where()
->setParameter(, 1)
->setParameter(, );
4. GROUP/ORDER
groupBy(string $expression, ...$expressions) — Belirtilen sütunlarda eşleşen değerleri gruplayarak, genellikle toplama işlevleri ile kullanılır.
// GROUP BY u.city - kullanıcıları konumlarına göre grupla
$qb->select()
->from(, )
->groupBy();
5. CRUD
insert(string $table) — QueryBuilder‘ı INSERT moduna geçirir ve yeni kayıt oluşturmak için hedef tabloyu ayarlar.
// INSERT INTO users (name, email) VALUES ...
$qb->insert()
->setValue(, )
->setValue(, )
->setParameter(, )
->setParameter(, );
6. UNION (DBAL 4.x)
union(string|QueryBuilder $part) — Birleştirerek sonuçları birleştirmek için ilk UNION bloğunu ekler.
// (SELECT u.id FROM users u) UNION (SELECT a.id FROM admins a)
$qb1 = $entityManager->createQueryBuilder()
->select()
->from(, );
$qb2 = $entityManager->createQueryBuilder()
->select()
->from(, );
$qb1->union($qb2->getDQL());
7. CTE
with(string $name, string|QueryBuilder $part, ?array $columns = null) — Birden fazla referans kullanmak için adlandırılmış bir alt sorgu oluşturur.
// WITH active_users AS (SELECT * FROM users WHERE active = 1)
$qb->with(, )
->select()
->from(, )
->leftJoin(, , , )
->groupBy();
8. LIMIT/OFFSET
setFirstResult(int $firstResult) — İlk N satırı atlamak için OFFSET ayarlar, sayfalama için kullanışlıdır.
// İlk 20 kullanıcıyı atla (sayfa 3, 20 sonuç)
$qb->select()
->from(, )
->setFirstResult(20)
->setMaxResults(20);
9. Parametreler
setParameter(int|string $key, mixed $value, $type = ParameterType::STRING) — Tek bir parametreyi bağlar; SQL enjeksiyonunu önler.
// İsimli parametre :userId
$qb->where()
->setParameter(, 123, ParameterType::INTEGER);
10. Çalıştırma
executeQuery(): Result — SELECT sorgularını yürütür ve bir Result nesnesi döndürür.
// SELECT işlemi yap ve sonucu al
$result = $qb->select()
->from(, )
->where()
->setParameter(, 1)
->getQuery()
->executeQuery();
Bitti!
Bu kılavuz, tüm temel Doctrine QueryBuilder yöntemlerini kapsayan 12 pratik bölüm içermektedir. Temiz, etkili SQL sorguları yazma konusunda size yardımcı olmayı amaçlamaktadır.
Kaynak: Orijinal Makale


