¿Cómo escribir consultas SQL en Latte?
Latte también puede ser útil para generar consultas SQL realmente complejas.
Si la creación de una consulta SQL implica numerosas condiciones y variables, puede resultar mucho más claro escribirla en Latte. Un ejemplo muy sencillo:
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}
Mediante $latte->setContentType()
indicamos a Latte que trate el contenido como texto plano (no como HTML) y,
además, preparamos una función de escape que escapará las cadenas directamente utilizando el driver de la base
de datos:
$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('Tipo no soportado'),
});
El uso se vería así:
$sql = $latte->renderToString('query.sql.latte', ['country' => $country]);
$result = $db->query($sql);
El ejemplo proporcionado requiere Latte v3.0.5 o superior.