Nette Documentation Preview

syntax
Latte'de SQL sorguları nasıl yazılır?
*************************************

.[perex]
Latte, gerçekten karmaşık SQL sorgularını daha okunabilir biçimde üretmek için de işe yarayabilir.

Bir SQL sorgusunun kurulması çok sayıda koşul ve değişken içeriyorsa, onu Latte'de yazmak anlaşılırlığı belirgin biçimde artırabilir. İşte çok basit bir örnek:

```latte
SELECT users.* FROM users
	LEFT JOIN users_groups ON users.user_id = users_groups.user_id
 	LEFT JOIN groups ON groups.group_id = users_groups.group_id
	{ifset $country} LEFT JOIN country ON country.country_id = users.country_id {/ifset}
WHERE groups.name = 'Admins' {ifset $country} AND country.name = {$country} {/ifset}
```

`$latte->setContentType()` ile Latte'ye içeriği düz metin (HTML değil) olarak ele almasını söyleriz. Sonra, dizeleri düzgün biçimde kaçırmak için veritabanı sürücüsünü kullanan bir kaçış fonksiyonu hazırlarız:

```php
$db = new PDO(/* ... */);

$latte = new Latte\Engine;
$latte->setContentType(Latte\ContentType::Text);
$latte->addFilter('escape', fn($val) => match (true) {
	is_string($val) => $db->quote($val),
	is_int($val), is_float($val) => (string) $val,
	is_bool($val) => $val ? '1' : '0',
	is_null($val) => 'NULL',
	default => throw new Exception('Unsupported type'),
});
```

Kullanımı şöyle görünürdü:

```php
$sql = $latte->renderToString('query.sql.latte', ['country' => $country]);
$result = $db->query($sql);
```

*Bu örnek Latte v3.0.5 veya üstünü gerektirir.*

Latte'de SQL sorguları nasıl yazılır?

Latte, gerçekten karmaşık SQL sorgularını daha okunabilir biçimde üretmek için de işe yarayabilir.

Bir SQL sorgusunun kurulması çok sayıda koşul ve değişken içeriyorsa, onu Latte'de yazmak anlaşılırlığı belirgin biçimde artırabilir. İşte çok basit bir örnek:

SELECT users.* FROM users
	LEFT JOIN users_groups ON users.user_id = users_groups.user_id
 	LEFT JOIN groups ON groups.group_id = users_groups.group_id
	{ifset $country} LEFT JOIN country ON country.country_id = users.country_id {/ifset}
WHERE groups.name = 'Admins' {ifset $country} AND country.name = {$country} {/ifset}

$latte->setContentType() ile Latte'ye içeriği düz metin (HTML değil) olarak ele almasını söyleriz. Sonra, dizeleri düzgün biçimde kaçırmak için veritabanı sürücüsünü kullanan bir kaçış fonksiyonu hazırlarız:

$db = new PDO(/* ... */);

$latte = new Latte\Engine;
$latte->setContentType(Latte\ContentType::Text);
$latte->addFilter('escape', fn($val) => match (true) {
	is_string($val) => $db->quote($val),
	is_int($val), is_float($val) => (string) $val,
	is_bool($val) => $val ? '1' : '0',
	is_null($val) => 'NULL',
	default => throw new Exception('Unsupported type'),
});

Kullanımı şöyle görünürdü:

$sql = $latte->renderToString('query.sql.latte', ['country' => $country]);
$result = $db->query($sql);

Bu örnek Latte v3.0.5 veya üstünü gerektirir.