Articles

Bilo koji upit može imati odgovarajući „upit za brojanje“. Upit za brojanje vraća broj redova iz izvornog upita. Da biste dobili upit za brojanje iz postojećeg upita (koji je objekat select upita koji implementira SelectInterface), koristite metod countQuery().


Neki SQL upiti mogu dati ponovljene rezultate. U takvim slučajevima duplikati se mogu filtrirati korišćenjem ključne reči „DISTINCT“ u statičkom upitu. U dinamičkom upitu koristite metod distinct().


Za grupisanje po određenom polju koristite metod groupBy().
$query->groupBy('uid');
Gornji kod će upitu narediti da grupiše po polju uid. Obratite pažnju da ime polja ovde mora biti alias kreiran metodama addField() ili addExpression(), pa ćete u većini slučajeva želeti da koristite vraćenu vrednost tih metoda da biste bili sigurni da je korišćen pravi alias.
Da biste dobili broj redova grupisanih po polju, na primer uid, možete izvršiti sledeće:


Da biste dodali WHERE uslov u dinamički upit, koristite metod condition():
$query->condition('bundle', 'article', '=');
Gornji kod će uputiti upit da filtrira rezultate na skup članaka. Obratite pažnju da ime polja ovde mora biti alias koji je kreiran metodama addField() ili addExpression().
Parametri Condition
Metod condition() prima tri parametra:


Select upit će uvek vratiti objekat skupa rezultata koji sadrži nula ili više zapisa. Postoji nekoliko načina da se dobiju podaci iz ovog skupa rezultata u zavisnosti od slučaja upotrebe. Zapisi se podrazumevano izvlače kao objekti, osim ako ne promenite režim izvlačenja (vidi: setFetchMode).
Najčešći slučaj je iteracija kroz skup rezultata pomoću foreach() petlje.


Upiti se mogu izvlačiti u objekte zasnovane na korisničkim klasama. Na primer, ako imamo klasu pod nazivom ExampleClass, sledeći upit će vratiti objekte tipa ExampleClass.
$result = $connection->query("SELECT id, title FROM {example_table}", [], [ 'fetch' => 'ExampleClass', ]);
Ako klasa ima metod __construct(), objekti će biti kreirani, svojstva će biti dodata objektu, a zatim će biti pozvan metod __construct(). Na primer, ako imate sledeću klasu i upit.


Upiti za ubacivanje uvek treba da koriste objekat konstruktora upita. U nekim bazama podataka potrebna je posebna obrada LOB (Large OBject, npr. TEXT u MySQL) i BLOB (Binary Large OBject) polja, zbog čega je potreban nivo apstrakcije da bi pojedinačni drajveri baza mogli da implementiraju bilo kakvu posebnu obradu koja im je potrebna.
Upiti za ubacivanje se pokreću korišćenjem metode insert() na sledeći način:


Merge upiti predstavljaju posebnu vrstu hibridnog upita. Iako je sintaksa za njih definisana u SQL 2003 specifikaciji, praktično nijedna baza podataka ne podržava standardnu sintaksu. Međutim, većina njih pruža alternativnu implementaciju koristeći sintaksu specifičnu za bazu podataka. Drupal-ov konstruktor merge upita apstrahuje koncept merge upita u strukturirani objekat koji može biti kompajliran sa odgovarajućom sintaksom za svaku bazu podataka. Ponekad se nazivaju i "UPSERT" upitima, kombinacijom UPDATE i INSERT.


Zahtevi za brisanje uvek treba da koriste objekat za pravljenje upita. Pokreću se korišćenjem metode delete() na sledeći način:
$query = $connection->delete('mytable', $options);
Ovo kreira objekat zahteva za brisanje koji briše zapise iz tabele mytable. Obratite pažnju da vitičaste zagrade nisu potrebne za ime tabele, jer će objekat za pravljenje upita to automatski obraditi.


Drupal takođe podržava transakcije, uključujući transparentnu rezervnu opciju za baze podataka koje ne podržavaju transakcije. Međutim, transakcije mogu biti prilično komplikovane ako pokušate pokrenuti dve transakcije istovremeno. Ponašanje u ovom slučaju takođe zavisi od baze podataka.
