¿Cómo escribir consultas SQL en Latte?

Latte también puede resultar útil para generar consultas SQL realmente complejas de una forma más legible.

Si al construir una consulta SQL intervienen numerosas condiciones y variables, escribirla en Latte puede mejorar mucho la claridad. Aquí tiene 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}

Con $latte->setContentType() le decimos a Latte que trate el contenido como texto plano (no como HTML). Después preparamos una función de escapado que usa el controlador de la base de datos para escapar las cadenas correctamente:

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

El uso quedaría así:

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

Este ejemplo requiere Latte v3.0.5 o superior.

versión: 3.x