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.