-
-
Notifications
You must be signed in to change notification settings - Fork 282
/
how-to-write-sql-queries-in-latte.texy
43 lines (33 loc) · 1.48 KB
/
how-to-write-sql-queries-in-latte.texy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Cum să scrieți interogări SQL în Latte?
***************************************
.[perex]
Latte poate fi util și pentru a genera interogări SQL foarte complexe.
În cazul în care crearea unei interogări SQL conține multe condiții și variabile, poate fi foarte clar să o scrieți în Latte. Un exemplu foarte simplu:
```latte
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}
```
Folosind `$latte->setContentType()` îi spunem lui Latte să trateze conținutul ca text simplu (nu ca HTML) și
apoi pregătim o funcție de escapare care să evadeze șirurile de caractere direct de către driverul bazei de date:
```php
$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'),
});
```
Utilizarea ar arăta astfel:
```php
$sql = $latte->renderToString('query.sql.latte', ['country' => $country]);
$result = $db->query($sql);
```
*Acest exemplu necesită Latte v3.0.5 sau o versiune mai recentă.*
{{leftbar: /@left-menu}}