Puncte:1

Obțineți valoarea câmpului de la mai multe entități simultan

drapel ar

Am un site Drupal folosind paragrafe în care unul dintre tipurile de conținut, să-l numim a grup, poate conține orice număr de paragrafe, iar fiecare dintre aceste paragrafe, să le numim Membrii, conține o referință la un utilizator. Vreau să primesc toate uids de utilizatori care sunt Membrii a unui dat grup.

Aș putea realiza acest lucru cu o interogare a bazei de date, cum ar fi

SELECTează field_user_target_id
DIN paragraph__field_user
WHERE entity_id = (
    SELECTează field_members_target_id
    DE LA node__field_members
    WHERE entity_id = <GroupID>
    LIMITA 1
);

pentru un dat GroupID, dar mă întreb dacă există o modalitate de a face acest lucru eficient fără a interoga direct baza de date. O variantă ar fi ceva de genul

$grup = \Drupal\nod\Entity\Node::load($grupID);
$uids = [];
foreach ($group->field_members->referencedEntities() ca $member) {
    $uids[] = $member->field_user->target_id;
}

dar există o modalitate de a face acest lucru fără a fi nevoie să treceți prin bucla Membrii?

Puncte:3
drapel cn

Bucla foreach este modul în care aș face-o, dar în opinia dvs., o interogare va fi de obicei cea mai eficientă. Acest lucru se aplică din punct de vedere tehnic în orice situație în care aveți un strat API între ele. Dacă preferați să creați o interogare, puteți face acest lucru, dar în general nu este necesar. Când vă profilez aplicația, dacă această zonă devine un blocaj, atunci aș începe să mă gândesc să fac așa ceva. Rețineți că utilizarea API-ului gestionează lucruri precum revizuirile și toate celelalte lucruri.

Vedea Drupal 8: cum pot „încărca cu nerăbdare” Entități referite prin câmpul EntityReferenceFieldItemList pentru mai multe detalii.În acea postare, ei explică utilizarea referencedEntities() încarcă acele entități în memorie, așa că nu este ca și cum acestea ar fi accesări individuale în baza de date.

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.