Rad sa bazom podataka u Drupal 7 - lekcija 9 - UPDATE upiti (ažuriranje)
UPDATE upiti uvek treba da koriste konstruktor upita. Različite baze podataka imaju specifične tretmane za LOB (Large OBject, kao što je TEXT u MySQL) i BLOB polja (Binary Large OBject), pa je potreban nivo apstrakcije za pojedinačne drajvere da implementiraju specifične tretmane.
UPDATE upiti počinju funkcijom db_update():
<?php $query = db_update('node', $options); ?>
Kreirajući ovaj objekat za update, menjamo jedan ili više zapisa u tabeli node. Napomena: nije potrebno koristiti viticaste zagrade oko imena tabele, konstruktor upita to radi automatski.
Objekat za update koristi fluent API, što znači da svi metodi (osim execute()) vraćaju objekat upita, omogućavajući lančano pozivanje metoda. Zbog toga se upiti često ne dodeljuju promenljivoj.
UPDATE upiti su jednostavni i sastoje se iz seta polje/vrednost koje se postavljaju i seta uslova WHERE. Potpuna struktura WHERE biće obrađena u narednim lekcijama, ovde ćemo je samo pomenuti.
Primer tipičnog UPDATE upita:
<?php /* Ovaj primer pokazuje kako ažurirati zapise u tabeli node */ $num_updated = db_update('node') ->fields(array( 'uid' => 5, 'status' => 1, )) ->condition('created', REQUEST_TIME - 3600, '>=') ->execute(); ?>
Primer iznad je ekvivalentan sledećem SQL upitu:
UPDATE {node} SET uid=5, status=1 WHERE created >= 1221717405;
Ovaj primer će ažurirati sve zapise u tabeli node koji su kreirani u poslednjem satu, postavljajući im uid na 5 i status na 1. Metod fields()
prima asocijativni niz polja i vrednosti koje treba postaviti. Za razliku od INSERT upita, UpdateQuery::fields()
podržava samo asocijativne nizove. Takođe, redosled elemenata u nizu i u pozivima metoda nije bitan.
Metod execute()
vraća broj redova koje je upit ažurirao. Napomena: ažurirani redovi nisu nužno svi koji zadovoljavaju WHERE uslov. Na primer, ako postoje nodovi sa uid=5 i status=1 koji zadovoljavaju uslov WHERE, oni neće biti izmenjeni jer vrednosti ostaju iste. Zato broj ažuriranih redova ne odražava uvek koliko trenutno ima nodova sa tim vrednostima.