9.11.2. Ծրագրային եղանակով ավելացնել, թարմացնել, ջնջել Entity-ը
Էակների հետ աշխատանքը Drupal-ում միատեսակ է, և բոլոր CRUD գործողություններն էլ նույնն են բոլոր էակների համար։ Այս հոդվածում մենք կսովորենք, թե ինչպես աշխատել էակների հետ սեփական կոդում։
Եկեք սկզբում դիտենք պարզ օրինակներ։
Ծրագրային եղանակով հանգույցի ստեղծում
use \Drupal\node\Entity\Node;
$node = Node::create([
'type' => 'article',
'title' => 'Druplicon test',
]);
$node->save();
Հանգույց ստեղծելու համար անհրաժեշտ է լրացնել բոլոր պարտադիր դաշտերը, ըստ լռելյայն՝ միայն Title դաշտն է պարտադիր։ Հանգույցի ստեղծումից հետո կարող եք նաև մուտք գործել հանգույցի օբյեկտին՝
$node = Node::create([
'type' => 'article',
'title' => 'Druplicon test',
]);
$node->field_text->value = 'Simple text';
$node->save();
create() մեթոդը գտնվում է Node.php դասում։ Եթե էակի տիպն ունի իր սեփական create() մեթոդը, ապա ցանկալի է օգտագործել հենց այն։ Չնայած կան նաև էակ ստեղծելու համընդհանուր տարբերակներ։
$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();
Ի վերջո, save() մեթոդի միջոցով պահպանում ենք էակը։
Ծրագրային եղանակով հանգույցի (էակի) թարմացում
$nid = 234;
$node_storage = \Drupal::entityTypeManager()->getStorage('node');
$node = $node_storage->load($nid);
$node->title = 'New title';
$node->field_text = 'text';
$node->save();
Էակների դաշտերի խմբագրման մասին մանրամասն դիտարկել ենք նախորդ հոդվածում՝
http://drupalbook.org/drupal/9111-work-entity-fields-programmatically
Ծրագրային եղանակով հանգույցի (էակի) ջնջում
Եթե ցանկանում եք ջնջել մեկ հանգույց, ապա դա կարելի է անել delete() մեթոդի միջոցով՝
$nid = 123;
$node = node_load($nid);
$node->delete();
Ծրագրային եղանակով մի քանի հանգույցների (էակների) ստեղծում
Երբ անհրաժեշտ է բեռնել բազմաթիվ հանգույցներ, անհատապես դա անելն ավելի շատ ռեսուրսներ կպահանջի, քանի որ յուրաքանչյուր հանգույց ունի դաշտեր, և տվյալների բազայից բեռնելու համար պետք է կատարել բազմաթիվ SQL հարցումներ։ Ավելի արդյունավետ է բեռնել բոլոր հանգույցները միանգամից՝
$nids = db_select('node_field_data', 'n')
->fields('n', ['nid'])
->condition('title', $my_title)
// node_access պիտակը կստուգի մատչելիության իրավունքը։
->addTag('node_access')
->execute()
->fetchCol();
$nodes = Node::loadMultiple($nids);
Ծրագրային եղանակով մի քանի հանգույցների (էակների) ջնջում
$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);