Uslovi
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:
- $field - polje za poređenje (obavezno).
- $value - vrednost za poređenje (opciono, podrazumevano NULL).
- $operator - operator poređenja (opciono, podrazumevano ‘=’)
Podržani operatori
Opšti operatori poređenja '=', '<>', '<', '<=', '>', '>=' su podržani u svim podržanim tipovima baza podataka.
Korišćenje IN, NOT IN
Operatori IN i NOT IN primaju niz u $value i porede vrednost polja sa vrednostima iz niza.
$users = [2,5,17,22]; $query->condition('uid', $users, 'IN');
U ovom primeru, upit će vratiti zapise kod kojih je uid jednak 2, 5, 17 ili 22.
Korišćenje BETWEEN i NOT BETWEEN
Operatori BETWEEN i NOT BETWEEN primaju niz od dve vrednosti za poređenje.
$query->condition('count', [5,10], 'BETWEEN');
Ovaj primer vraća zapise gde je vrednost u opsegu od 5 do 10.
Korišćenje IS NULL, IS NOT NULL, EXISTS i NOT EXISTS
Preporučljivo je koristiti sledeće metode umesto condition():
$query->isNull($field); $query->isNotNull($field); $query->exists($field); $query->notExists($field);
Iako uslov kao što je $query->condition($field, NULL, 'IS NOT NULL'); može raditi, gore navedena konvencija je preporučena.
Ostali operatori
Drugi operatori, poput BINARY ili specifični za određeni sistem baze podataka, mogu ili ne moraju raditi. Vodite računa o tome pri razvoju modula koji mogu raditi na različitim sistemima.
Korišćenje više uslova (Conditions)
Mogu se dodati više poziva condition() za dodatno filtriranje upita.
$query->condition('bundle', 'article', '='); $query->condition('status', 1, '=');
Ako postoji više uslova kao u primeru iznad, svi uslovi moraju biti ispunjeni da bi zapis bio u rezultatu (uslovi se povezuju sa AND).
Napomena: Da biste imali upit sa uslovima povezanima samo sa OR, koristite jednu orConditionGroup.
Grupe uslova (Conditions)
Grupe uslova se mogu koristiti za kreiranje složenijih WHERE izraza (uključujući OR) u upitu. Postoje dve vrste grupa uslova:
- orConditionGroup - vraća objekat uslova povezanih sa OR
- andConditionGroup - vraća objekat uslova povezanih sa AND
Grupe uslova vraćaju objekat koji se zatim može dodati kao uslov u upit.
// Kreiranje orConditionGroup $orGroup = $query->orConditionGroup() ->condition('promoted', 1) ->condition('uid', [2,4,7,22], 'IN'); // Dodavanje grupe u upit. $query->condition($orGroup);
U ovom primeru uslovi za promoted i uid se dodaju u WHERE deo upita, grupisani zajedno sa OR. To će rezultirati WHERE uslovom koji izgleda ovako:
WHERE (promoted = 1 OR uid IN (2,4,7,22))
Po potrebi možete dodati više orConditionGroup i andConditionGroup grupa. Grupe uslova mogu biti i ugnježdene za složenije WHERE uslove.
Evo primera složenog WHERE uslova:
WHERE (a = 1 OR b = 1) AND ((c = 1 AND d = 1) OR (e = 1))
Ovi uslovi u upitu mogu se napisati sa grupama uslova kao:
$orGroup1 = $query->orConditionGroup() ->condition('a', 1) ->condition('b', 1); $andGroup1 = $query->andConditionGroup() ->condition('c', 1) ->condition('d', 1); $orGroup2 = $query->orConditionGroup() ->condition($andGroup1) ->condition('e', 1); $query->condition($orGroup1); $query->condition($orGroup2);
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.