Nette Documentation Preview

syntax
Latte'de SQL Sorguları Nasıl Yazılır?
*************************************

.[perex]
Latte, gerçekten karmaşık SQL sorguları oluşturmak için de yararlı olabilir.

Bir SQL sorgusunun oluşturulması birçok koşul ve değişken içeriyorsa, bunu Latte'de yazmak gerçekten daha net olabilir. Ç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()` adresini kullanarak Latte'ye içeriği düz metin (HTML olarak değil) olarak ele almasını ve
ardından, dizeleri doğrudan veritabanı sürücüsü tarafından kaçan bir kaçış işlevi 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 şu şekilde olacaktır:

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

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

{{leftbar: /@left-menu}}

Latte'de SQL Sorguları Nasıl Yazılır?

Latte, gerçekten karmaşık SQL sorguları oluşturmak için de yararlı olabilir.

Bir SQL sorgusunun oluşturulması birçok koşul ve değişken içeriyorsa, bunu Latte'de yazmak gerçekten daha net olabilir. Ç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() adresini kullanarak Latte'ye içeriği düz metin (HTML olarak değil) olarak ele almasını ve ardından, dizeleri doğrudan veritabanı sürücüsü tarafından kaçan bir kaçış işlevi 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 şu şekilde olacaktır:

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

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