Puncte:0

Cum pot șterge în mod programatic o valoare de câmp?

drapel gb

Folosind Entity API, știu cum să obțin o valoare sau să setez o valoare:

$nid = $entitate->id();
$nod = \Drupal::entityTypeManager()->getStorage('node')->load($nid);
...
$nom = strtoupper($nod->get('field_nom')->value);
$nod->set('field_nom', $nom);
$nod->salvare();

Dar există posibilitatea de a șterge o valoare a acestui câmp?

Am încercat să șterg direct valoarea din baza de date

$interogare =\Drupal::database()->delete('node__field_nom');
$query->condition('field_nom', $nom);
$interogare->execute();

Dar, deoarece valoarea este stocată în cache, nodul trebuie să reîncarce de două ori pentru a vedea rezultatul pe ecran (un câmp gol)

Puncte:2
drapel cn

Conținutul câmpului este o listă de elemente de câmp și, în mod normal, ar trebui să includeți o singură valoare și într-o matrice. Faptul că puteți seta un scalar ca în exemplul dvs. se datorează codului suplimentar din API-ul Field care detectează scalarul și îl transferă într-o listă de elemente de câmp cu o singură valoare. Pentru a șterge câmpul, nu puteți seta un scalar gol, deoarece acesta ar fi interpretat ca un singur element de câmp cu acea valoare goală.

Deci, pentru a șterge întregul conținut al câmpului, setați o matrice goală:

$nod->set('field_nom', []);

BTW, puteți obține întregul conținut al câmpului:

$valori = $nod->get('field_nom')->getValue();

Schimbați matricea $value și setați-o din nou:

$nod->set('field_nom', $valori);
cocq avatar
drapel gb
Functioneaza :-) multumesc!

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.