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 (et non comme du HTML) et nous préparons ensuite la fonction d'échappement, qui échappera les chaînes directement avec le pilote de 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('Type non supporté'),
});

L'utilisation ressemblerait à ceci :

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

L'exemple donné nécessite Latte v3.0.5 ou supérieur.

version: 3.0