9.11.2. Dodavanje, ažuriranje, brisanje entiteta programatski
Rad sa entitetima u Drupalu je jedinstven, a sve CRUD operacije su takođe iste za sve entitete. U ovom članku ćemo razjasniti kako raditi sa entitetima u prilagođenom kodu.
Prvo pogledajmo jednostavne primere.
Kreiranje čvora (node) programatski
use \Drupal\node\Entity\Node;
$node = Node::create([
'type' => 'article',
'title' => 'Druplicon test',
]);
$node->save();
Da biste kreirali čvor, potrebno je da dodate sva obavezna polja, podrazumevano je to samo polje Naslov (Title). Takođe možete pristupiti objektu čvora nakon njegove kreacije:
$node = Node::create([
'type' => 'article',
'title' => 'Druplicon test',
]);
$node->field_text->value = 'Simple text';
$node->save();
Metod create() nalazi se u klasi Node.php, ako tip entiteta ima svoj create() metod, najbolje je koristiti njega. Iako postoje univerzalni načini za kreiranje entiteta.
$node_entity_type = \Drupal::entityTypeManager()->getDefinition('node');
$node = new Node([
$node_entity_type->getKey('bundle') => 'movie',
$node_entity_type->getKey('label') => 'Foo',
'field_release_date' => '1/1/2015',
]);
$node->save();
Na kraju, metodom save() sačuvamo entitet.
Ažuriranje čvora (entiteta) programatski
$nid = 234;
$node_storage = \Drupal::entityTypeManager()->getStorage('node');
$node = $node_storage->load($nid);
$node->title = 'New title';
$node->field_text = 'text';
$node->save();
Detaljnije o izmeni polja entiteta smo razmatrali u prethodnom članku:
http://drupalbook.org/drupal/9111-work-entity-fields-programmatically
Brisanje čvora (entiteta) programatski
Ako želite da obrišete jedan čvor, to možete učiniti pomoću metode delete():
$nid = 123;
$node = node_load($nid);
$node->delete();
Kreiranje više čvorova (entiteta) programatski
Kada je potrebno učitati mnogo čvorova, nije efikasno učitavati ih pojedinačno, jer svaki čvor ima polja i za učitavanje podataka iz baze će biti potrebno mnogo SQL upita. Mnogo je brže učitati sve čvorove odjednom:
$nids = db_select('node_field_data', 'n')
->fields('n', ['nid'])
->condition('title', $my_title)
// Tag node_access će proveriti prava pristupa.
->addTag('node_access')
->execute()
->fetchCol();
$nodes = Node::loadMultiple($nids);
Brisanje više čvorova (entiteta) programatski
$result = \Drupal::entityQuery("node")
->condition('created', strtotime('-30 days'), '=')
->execute();
$storage_handler = \Drupal::entityTypeManager()->getStorage("node");
$entities = $storage_handler->loadMultiple($result);
$storage_handler->delete($entities);