Nette Documentation Preview

syntax
Comment écrire des requêtes SQL dans Latte ?
********************************************

.[perex]
Latte peut également être utile pour générer des requêtes SQL vraiment complexes.

Si la création d'une requête SQL contient de nombreuses conditions et variables, il peut être vraiment plus clair de l'écrire en Latte. Un exemple très simple :

```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}
```

En utilisant `$latte->setContentType()`, nous disons à Latte de traiter le contenu comme du texte brut (pas comme du HTML) et
puis nous préparons une fonction d'échappement qui échappe les chaînes de caractères directement par le pilote de la base de données :

```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'),
});
```

L'utilisation ressemblerait à ceci :

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

*Cet exemple nécessite Latte v3.0.5 ou une version plus récente.*

{{leftbar: /@left-menu}}

Comment écrire des requêtes SQL dans Latte ?

Latte peut également être utile pour générer des requêtes SQL vraiment complexes.

Si la création d'une requête SQL contient de nombreuses conditions et variables, il peut être vraiment plus clair de l'écrire en Latte. Un exemple très simple :

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}

En utilisant $latte->setContentType(), nous disons à Latte de traiter le contenu comme du texte brut (pas comme du HTML) et puis nous préparons une fonction d'échappement qui échappe les chaînes de caractères directement par le pilote de la base de données :

$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'),
});

L'utilisation ressemblerait à ceci :

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

Cet exemple nécessite Latte v3.0.5 ou une version plus récente.