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

9.13. Rad sa bazom podataka u Drupalu

27/05/2025, by Ivan

Ovo je čest slučaj prilikom razvoja Drupal modula. Trebalo bi koristiti entityQuery gde je to moguće, ali ponekad je potrebno koristiti SQL upite za dobijanje složenijih podataka.

Možete dodati ovu stranicu u omiljene kako biste uvek imali kod za brzo podsećanje kako izvršavati MySQL upite select, insert, update, delete u Drupalu.

Select

Dobijanje jedne vrednosti:

$query = \Drupal::database()->select('node_field_data', 'n');
$query->addField('n', 'nid');
$query->condition('n.title', 'About Us');
$query->range(0, 1);
$nid = $query->execute()->fetchField();

Dobijanje zapisa kao asocijativnog niza:

$query = \Drupal::database()->select('node_field_data', 'n');
$query->fields('n', ['nid', 'title']);
$query->condition('n.type', 'page');
$query->range(0, 1);
$vegetable = $query->execute()->fetchAssoc();

Takođe možete koristiti ->fetchObject(), ->fetchAll() za dobijanje zapisa kao objekat.

Korišćenje LIKE u upitu:

$query = \Drupal::database()->select('node_field_data', 'n');
$query->fields('n', ['nid', 'title']);
$query->condition('n.type', 'page');
$query->condition('n.title', $query->escapeLike('About') . '%', 'LIKE');
$vegetable = $query->execute()->fetchAllKeyed();

Select upit sa JOIN-om:

$query = \Drupal::database()->select('node_field_data', 'n');
$query->fields('n', ['nid', 'title']);
$query->addField('u', 'name');
$query->join('users_field_data', 'u', 'u.uid = n.uid');
$query->condition('n.type', 'page');
$vegetable = $query->execute()->fetchAllAssoc('nid');

U nastavku su primeri drugih baza upita: insert, update, upsert i delete. Ovi upiti mogu biti korisni za rad sa prilagođenim tabelama. Ali bolje je dvaput razmisliti pre korišćenja prilagođenih tabela. Bolje je koristiti Drupal API ili dopunske module. Ali ako ipak odlučite da pišete prilagođene upite za bazu, ispod su primeri:

Insert

$query = \Drupal::database()->insert('flood');
$query->fields([
  'event',
  'identifier'
]);
$query->values([
  'My event',
  'My indentifier'
]);
$query->execute();

Možete pozvati values() više puta da ubacite više zapisa odjednom.

Update

$query = \Drupal::database()->update('flood');
$query->fields([
  'identifier' => 'My new identifier'
]);
$query->condition('event', 'My event');
$query->execute();

Upsert

$query = \Drupal::database()->upsert('flood');
$query->fields([
  'fid',
  'identifier',
]);
$query->values([
  1,
  'My indentifier for upsert'
]);
$query->key('fid');
$query->execute();

Metod key() treba da opisuje naziv polja koje će se koristiti za određivanje postojećeg zapisa. Nije potrebno pisati condition(), možete koristiti key() metod. Polje koje se koristi u key() metodu mora biti jedinstveno, na primer nid, uid, tid, fid ili drugi ID-jevi entiteta. Ako ključ ne postoji, umesto ažuriranja zapisa, biće ubačen novi zapis sa zadatim ključem.

Delete

$query = \Drupal::database()->delete('flood');
$query->condition('event', 'My event');
$query->execute();

To je sve. Ako vam treba još primera, pišite u komentarima. U narednim tutorijalima ćemo pogledati kako koristiti prilagođene Drupal baze upita u praksi.