logo

Dodatni tipovi blokova (EBT) - Novo iskustvo rada sa Layout Builder-om❗

Dodatni tipovi blokova (EBT) – stilizovani, prilagodljivi tipovi blokova: slajdšouvi, kartice sa tabovima, kartice, akordeoni i mnogi drugi. Ugrađena podešavanja za pozadinu, DOM Box, javascript dodatke. Iskusite budućnost kreiranja rasporeda već danas.

Demo EBT moduli Preuzmite EBT module

❗Dodatni tipovi pasusa (EPT) – Novo iskustvo rada sa pasusima

Dodatni tipovi pasusa (EPT) – analogni skup modula zasnovan na pasusima.

Demo EPT moduli Preuzmite EPT module

Scroll
18/06/2025, by Ivan

Dinamički upiti se odnose na upite koje Drupal dinamički kreira, a ne one koji su pruženi kao eksplicitni SQL string. Svi upiti za ubacivanje, ažuriranje, brisanje i spajanje moraju biti dinamički. Select upiti mogu biti statički ili dinamički. Dakle, „dinamički upit“ obično se odnosi na dinamički Select upit.

Napomena: u 90% slučajeva korišćenja select upita koristićete statički upit. Ako ste na kritičnoj putanji performansi, treba da koristite query() umesto select() iz razloga performansi. Dinamičke upite koristite samo ako se delovi upita razlikuju (npr. dodavanje WHERE uslova u zavisnosti od konteksta) ili ako treba da budu menjivi.

Svi dinamički kreirani upiti se prave pomoću objekta upita koji se dobija iz odgovarajućeg objekta za konekciju sa bazom podataka. Kao i kod statičkih upita, u većini slučajeva može se koristiti proceduralna omotnica oko objekta upita. Međutim, naredbe za definisanje upita se pozivaju kao metode na objektu upita.

Dinamički Select upiti se pokreću korišćenjem metode select() na sledeći način:

$database = \Drupal::database();
$query = $database->select('mytable', 'mt', $options);

Ovde je mytable osnovna tabela upita; prva tabela nakon FROM klauzule. Obratite pažnju da ime tabele ne treba biti u zagradama, konstruktor upita će to automatski obraditi. Drugi parametar je alias tabele. Ako nije naveden, koristi se ime tabele. Niz $options nije obavezan i isti je kao za statičke upite.

Vrednost koju vraća $database->select() je objekat tipa Select. Dakle, tip promenljive $query nakon ovog poziva je objekat tipa Select. Taj objekat ima kompletan skup metoda poput fields(), joins() i group(), koje možete pozivati za dalju definiciju upita.

Dinamički Select upiti mogu biti vrlo jednostavni ili veoma složeni. Ispod ćemo prikazati delove koji čine jednostavan upit, a na narednim stranicama ćemo pokriti složenije metode kao što su joinovi.

Šira slika

Ovo je relativno jednostavan upit tabele korisnika.

Recimo da želimo da napravimo dinamički upit koji je približno ekvivalentan sledećem statičkom upitu:

$result = $database->query("SELECT uid, name, status, created, access FROM {users} u WHERE uid <> 0 LIMIT 50 OFFSET 0");

Dinamički ekvivalent počinje ovako:

// Kreirajte objekat tipa Select.
$database = \Drupal::database();
$query = $database->select('users', 'u');
 
// Dodajte detalje upitu: uslov, polja i opseg.
$query->condition('u.uid', 0, '<>');
$query->fields('u', ['uid', 'name', 'status', 'created', 'access']);
$query->range(0, 50);

Ovo se često piše sa skraćenim sintaksama koje omogućavaju lančano pozivanje metoda na objektu $query. Zato se gornji kod često piše ovako:

// Kreirajte objekat tipa Select.
$query = $database->select('users', 'u');
 
// Dodajte detalje upitu: uslov, polja i opseg.
$query->condition('u.uid', 0, '<>')
  ->fields('u', ['uid', 'name', 'status', 'created', 'access'])
  ->range(0, 50);

U stvari, kod se može dodatno pojednostaviti tako što ćete direktno povezati poziv $database->select() sa pozivima metoda za dobijeni objekat. To daje:

// Kreirajte objekat tipa Select i direktno dodajte detalje
// upitu: uslov, polja i opseg.
$query = $database->select('users', 'u')
  ->condition('u.uid', 0, '<>')
  ->fields('u', ['uid', 'name', 'status', 'created', 'access'])
  ->range(0, 50);

Ovo je pojednostavljeni oblik upita koji koristi stranica za administraciju korisnika, i može vam poslužiti kao referenca za dalju analizu.

Izvršenje upita

Kada je upit konstruisan, pozovite metod execute() da biste kompajlirali i pokrenuli upit.

$result = $query->execute();

Metod execute() vraća objekat skupa rezultata / izvršioca, isti kao objekat koji vraća funkcija $database->query(), i može se koristiti za iteraciju ili izvlačenje podataka na isti način:

$result = $query->execute();
foreach ($result as $record) {
  // Uradite nešto sa svakim $record.
}

Napomena. Budite oprezni pri korišćenju sledećih metoda sa dinamičkim upitima sa više kolona:

Ovi metodi trenutno zahtevaju numeričke indekse kolona (0, 1, 2 itd.), a ne alias-e tabela. Međutim, konstruktor upita trenutno ne garantuje određeni redosled vraćenih polja, pa kolone mogu biti u drugačijem redosledu od očekivanog. Posebno, izrazi se uvek dodaju nakon polja, čak i ako ih najpre dodate u upit. (Ovaj problem ne važi za statičke upite, koji uvek vraćaju kolone u tačno navedenom redosledu.)

Debugovanje

Da biste pregledali SQL upit koji objekat upita koristi u određenom trenutku svog životnog ciklusa, odštampajte objekat upita. Da biste proverili argumente, pogledajte niz koji vraća metod arguments():

echo $query;
print_r($query->__toString());
print_r($query->arguments());

 

Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.