Szukam identyfikatora jednostki typu A i znam identyfikator jednostki B, która odwołuje się do A.
Znalazłem kilka fajnych źródeł o EntityFieldQuery. Byłem zaskoczony, że otrzymałem wyniki z .NET w google :) (czy to oznaka dojrzałości Drupala? :). Ale nie udało mi się tego znaleźć. Proszę pomóż ...
Niektóre źródła:
Tak to wygląda z ładowaniami encji - zrozumiesz, że potrzebuję tego zapytania :) Opakowanie służy głównie do ćwiczeń. Zauważ, że ładuje jednostkę docelową - całkiem sporo zapytań.
$b = entity_load('B', array($id));
$bm = entity_metadata_wrapper('B', $sl[$id]);
$tsl = $slm->field_sl_tpref->value();
echo $tsl->id;
EntityFieldQuery
Może odwoływać się tylko jeden zbiór jednostek, nie mogą tworzyć relacje z innymi podmiotami niestety. Może również zwracać tylko jeden typ encji na raz, więc nawet gdyby można było utworzyć te relacje, wyniki byłyby niewiarygodne.Odpowiedzi:
Możesz użyć
target_id
zamiastvalue
do pobierania encji na podstawie identyfikatora encji, do których istnieją odniesienia:źródło
err, czy szukasz modułu relacyjnego ? Wygląda na to, że zdefiniowanie relacji między elementami X i Y jest tym, czego chcesz. ma własne RelationQuery (opakowanie wokół EFQ) i RelationQueryEndpoints, aby łatwo uzyskać tego rodzaju informacje.
źródło
Wiem, że to jest starsze pytanie, ale dla ludzi, którzy docierają do tego z Google, pomyślałem, że rzuciłbym tutaj inne podejście.
Z powyższego opisu konfiguracja ma 2 typy encji, A i B. B referencje A z referencją encji Zakładam. Więc jeśli masz identyfikator B, powinieneś mieć pole z identyfikatorem A przechowywane w bazie danych.
Uwagi do kodu:
$original_node->nid
byłby to identyfikator B$type
powinien to być typ AKod
Możesz także skonfigurować dwukierunkowe odwołania do encji i wykonać to samo zapytanie powyżej. Możesz użyć modułu takiego jak CER, aby upewnić się, że te referencje są aktualne. Lub skonfiguruj regułę, aby aktualizować referencje, użyłem obu.
źródło
fieldCondition('field_NAME_OF_FIELD', 'target_id', $original_node->nid, '=')
? powinien zostać zmieniony nafieldCondition('field_NAME_OF_FIELD', 'target_id', array($original_node->nid), 'IN')
. Nie można znaleźć niczego o tym, jak zastosować warunek w polu odwołania do jednostki wielowartościowej. jakieś sugestie?dość dynamiczne rozwiązanie (trochę brudne, ale potrzebowałem go szybko), więc nie musisz sztywno kodować nazwy pola referencyjnego i jest ono obsługiwane automatycznie z nowym polem referencyjnym, które dodasz w przyszłości:
w niestandardowym module:
gdzie musisz uzyskać węzły nadrzędne, biorąc pod uwagę węzeł podrzędny:
źródło