Come scrivere query SQL in Latte?

Latte può tornare utile anche per generare in modo più leggibile query SQL davvero complesse.

Se la costruzione di una query SQL comporta numerose condizioni e variabili, scriverla in Latte può migliorarne sensibilmente la chiarezza. Ecco un esempio molto semplice:

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() diciamo a Latte di trattare il contenuto come testo semplice (non come HTML). Poi prepariamo una funzione di escaping che usa il driver del database per fare l'escaping corretto delle stringhe:

$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'uso avrebbe questo aspetto:

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

Questo esempio richiede Latte v3.0.5 o superiore.

versione: 3.x