Chciałbym uruchomić zapytanie przy użyciu obiektu EntityFieldQuery. Potrzebuję wartości zarówno z tabeli node, jak i node_access, dlatego musiałbym użyć INNER JOIN. Z dokumentacji do nie mogę dowiedzieć się, jak to możliwe.
Oto co mam -
$query = new EntityFieldQuery();
$result = $query->entityCondition('entity_type', 'node')
->entityCondition('bundle', 'node_access')
->propertyCondition('type', 'external_link')
->propertyCondition('status', 1)
->fieldCondition('gid', '3', '=')
->fieldCondition('realm', 'domain_id', '=')
->fieldCondition('grant_view', '1', '>=')
->range(0,1)
->execute();
->fieldCondition('field_name', 'target_id', $entities_a, 'IN');
Odpowiedzi:
Nie możesz dodać dodatkowych złączeń
EntityFieldQuery
bezpośrednio (nie jest to obsługiwane), ale możesz dodać znacznik do zapytania, zaimplementowaćhook_query_TAG_alter()
i dodać złączenie ręcznie, gdy zapytanie zostanie przekształcone w standardowe zapytanie db.Nie jest to testowane, ale prawdopodobnie zapewni Ci większość możliwości:
A potem funkcja zmiany zapytania:
Innym sposobem na zrobienie tego byłoby podklasowanie
EntityFieldQuery
i dodanie sprzężenia, ale myślę, że powyższa metoda jest w tym przypadku prostsza.źródło
EntityFieldQuery
db_select
czemu możesz mieć nad nim pełną kontrolęEntityFieldQuery
nie buforuje , po prostu owija się wokółSelectQuery
i dodaje pewne metody dla encji. Te dodatkowe metody odpowiadają za niewielki (bardzo niewielki) spadek wydajności, którego doświadczyłbyś podczas korzystania z niego w przeciwieństwie do zwykłegoSelectQuery
Jeśli używasz niestandardowych właściwości z własnymi tabelami, metoda tagu nie będzie działać. Zamiast tego musisz użyć podkwerend:
Zobacz Potrzebujesz dołączyć do EntityFieldQuery, a co z podzapytaniem? dla szczegółów.
źródło