Puncte:-1

Cum accesez valoarea protejată a entității nod?

drapel in

Am un nod de vizualizare și folosesc codul de mai jos pentru a elimina obiectele nodului:

$nod = \Drupal::entityTypeManager()
      ->getStorage('nodul')
      ->loadMultiple();
 dpm($nod);

returnează rezultatul de mai jos:

introduceți descrierea imaginii aici

Pot să văd proprietățile fiecărui nod. În aceasta, vreau să accesez target_id/value al câmpului evidențiat - field_cp_level2_ref_level3. Am încercat linia de mai jos și iese ca nulă:

$node->field_cp_level2_ref_level3->target_id

Cum se accesează această valoare de câmp?

miststudent2011 avatar
drapel fr
Does this answer your question? [8 - Node::load is generating an object with circular reference which is crashing kint() and var\_export()](https://drupal.stackexchange.com/questions/200046/8-nodeload-is-generating-an-object-with-circular-reference-which-is-crashing)
miststudent2011 avatar
drapel fr
When you want to dump it, just use $node->toArray() , Refer https://drupal.stackexchange.com/a/200118/71454
drapel in
@misstudent2011 Nu menționez că pagina mea se prăbușește din cauza referințelor circulare generate. Întreb doar o modalitate de a accesa valorile protejate. Întrebarea la care ați făcut referire nu mă ajută.
miststudent2011 avatar
drapel fr
ai trecut prin răspunsul din linkul pe care l-am distribuit? Vă oferă modalitatea de a obține valorile protejate. Se pare că întâmpinați dificultăți în a-l obține, lăsați-mă să-l lipesc ca comentariu.
miststudent2011 avatar
drapel fr
Când vrei să-l arunci, folosește `$node->toArray()`. Apoi obțineți o matrice cu valorile simple.Puteți utiliza din nou acele nume de câmp și proprietăți pentru a accesa valorile de pe obiectul nod, de ex. `$nod->câmpul tău->valoare.`
drapel in
Mulțumesc @miststudent2011, dar efectuarea unui $node->toArray returnează eroarea de mai jos: „Eroare: Apelați la o funcție membru toArray() pe matrice” . de asemenea, făcând $node->yourfield->value returnează null :(
Puncte:0
drapel bd

Problema ta este că îți asumi greșit rezultatul loadMultiple să fie un obiect nod, când în schimb returnează o matrice de obiecte nod.

Ar trebui să poți face asta:

$noduri = \Drupal::entityTypeManager()
  ->getStorage('nodul')
  ->loadMultiple();
$nod = resetare($noduri);

Acum ar trebui să puteți accesa valorile pe care le vedeți în rezultatul de depanare:

$nod->field_cp_level2_ref_level3->target_id;

De fapt, este puțin discutabil să încărcați toate nodurile pe care le aveți în sistemul dvs. S-ar putea să funcționeze în continuare cu cele 294 de noduri, dar va crea probleme pe site-urile cu mai mult conținut. În schimb, ar trebui să adăugați condiții, de ex. prin utilizarea loadByProperties pe stocarea nodului.

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.