Comment écrire des requêtes SQL dans Latte ?
Latte peut aussi rendre service pour générer de façon plus lisible des requêtes SQL vraiment complexes.
Si la construction d'une requête SQL fait intervenir de nombreuses conditions et variables, l'écrire en Latte améliore nettement la clarté. Voici 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}
Avec $latte->setContentType(), nous indiquons à Latte de traiter le contenu comme du texte brut (et non comme
du HTML). Nous préparons ensuite une fonction d'échappement qui échappe correctement les chaînes en s'appuyant sur le driver
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 supérieure.