Drupal 7 ma bardzo obiecujący system zapytań podobny do ORM z EntityFieldQuery.
Obecnie rozumiem, jak dokonać wyboru węzłów, ale wynik nie zawiera żadnych konkretnych informacji, takich jak pliki, których szukam.
$query = new EntityFieldQuery();
$entities = $query->entityCondition('entity_type', 'node')
->entityCondition('bundle', 'event')
->propertyCondition('status', 1)
->fieldCondition('field_date', 'value', array('2011-03-01', '2011-03-31'), 'BETWEEN')
->fieldOrderBy('field_date', 'value', 'ASC')
->execute();
Musimy więc załadować całe dane węzłów, jeśli chcielibyśmy uzyskać tylko wartości jednego pola, na przykład „data_pola” w bieżącym przykładzie.
$nodes = entity_load('node', array_keys($entities['node']));
Jeśli istnieje sposób na uzyskanie wartości pól, zamiast ładowania pełnych danych wszystkich węzłów, ponieważ powoduje to pewne przeciążenie pamięci.
$nodesFieldDates = ???
Znalazłem odpowiedź na to! Moduł Apache Solr rozszerza klasę EntityFieldQuery , aby tak się stało. Dodaje nową metodę o nazwie addExtraField.
Jeśli nie masz zainstalowanego Apache Solr, po prostu skopiuj kod rozszerzenia tej klasy.
źródło
Nie musisz niczego zastępować ani rozszerzać klasy. Wystarczy użyć,
field_attach_load()
aby dołączyć pole, które chcesz, do wyników zEntityFieldQuery
klasy.Zobacz także Ładowanie tylko jednego pola z encji lub węzła w Drupal 7 , dobrym artykule z przykładami, jak to zrobić.
źródło
Każdy, kto nadal chce uzyskać Pola z EFQ, może zajrzeć do modułu EFQ Extra Fields .
źródło