Jakie jest właściwe zastosowanie EntityFieldQuery?
37
W Drupal 7 dokumentacja API dla node_load_multiple()określania używania $conditionsparametru została wycofana na korzyść użycia EntityFieldQuery. Jak wykorzystać klasę do wygenerowania listy identyfikatorów węzłów do użycia node_load_multiple()? Czy istnieją inne przypadki użycia?
EntityFieldQuery używa zestawu haków do łączenia się z modułami pamięci pól, takimi jak Pamięć pól SQL, w celu pracy z polami, a także innymi właściwościami węzłów. W dłuższej perspektywie EntityFieldQuery jest znacznie bardziej niezawodnym sposobem na zapytanie dowolnego typu encji, aw niektórych sytuacjach może wykonywać zapytania między eniami ( na przykład patrz field_has_data lub _list_values_in_use ()) .
Oto prosty przykład użycia EntityFieldQuery do uzyskania listy wszystkich węzłów opublikowanych przed określonym znacznikiem czasu:
field_has_data jest ładniejszym przykładem imo niż _list_values_in_use
15
Znalazłem problem na Drupal dotyczący dodawania przykładów dla EntityFieldQuery. Używałem go do przykładów, a także do wyrażania opinii na temat zaproszenia do kolejnych przykładów.
Uwaga, metoda fieldOrderBy pominie wszystkie węzły, w których powiązane pole jest puste. Co jest mylące, ponieważ ma to jedynie na celu sortowanie, a nie filtrowanie (można oczekiwać, że węzły z pustym polem będą na górze lub na dole zestawu wyników). Więcej informacji i mam nadzieję, że poprawkę można znaleźć tutaj drupal.org/node/1611438 i tutaj drupal.org/node/1662942
To wybiera węzły, których pole treści zaczyna się od „A”. Zobacz także EntityFieldQuery :: execute () na temat korzystania ze zwróconego wyniku.
Istnieje wiele przypadków użycia, typowym przykładem jest zapytanie jednostek o określoną wartość pola, np. Pole treści, jak pokazano w pierwszym przykładzie.
Zaletą jest to, że działa bez względu na to, jakiego miejsca przechowywania używasz. Na przykład możesz mieć swoje pola w MongoDB, a EntityQuery będzie nadal działać, podczas gdy ręczne sprawdzanie danych pola_danych_body nie.
array ('TYPE'=>
array (123=>
stdClass::__set_state(array('nid'=>'123',// Can be also tid when loading terms.'key'=>'value',)),456=>
stdClass::__set_state(array('nid'=>'456','key'=>'value',)),),)
Aby pobrać identyfikator z tablicy wyników, można użyć: current(current($result))->tid.
Oto bardziej zaawansowany przykład:
<?php
$query =newEntityFieldQuery();
$query->entityCondition('entity_type','node')->entityCondition('bundle','article')->propertyCondition('status', NODE_PUBLISHED)->fieldCondition('field_news_types','value','spotlight','=')->fieldCondition('field_photo','fid','NULL','!=')->fieldCondition('field_faculty_tag','tid', $value)->fieldCondition('field_news_publishdate','value', $year .'%','like')->fieldOrderBy('field_photo','fid','DESC')->range(0,10)->addMetaData('account', user_load(1));// Run the query as user 1.
$result = $query->execute();if(isset($result['node'])){
$news_items_nids = array_keys($result['node']);
$news_items = entity_load('node', $news_items_nids);}?>
Znalazłem problem na Drupal dotyczący dodawania przykładów dla
EntityFieldQuery
. Używałem go do przykładów, a także do wyrażania opinii na temat zaproszenia do kolejnych przykładów.„ Czy potrzebujemy przykładu EntityFieldQuery? ”
Komentarz # 11 Wykorzystanie pokazy
node_load_multiple()
, jak widać poniżej:źródło
Oto przykład z jednego z modułów testowych:
http://api.drupal.org/api/drupal/modules--node--tests--node_access_test.module/function/node_access_entity_test_page/7
To wybiera węzły, których pole treści zaczyna się od „A”. Zobacz także EntityFieldQuery :: execute () na temat korzystania ze zwróconego wyniku.
Istnieje wiele przypadków użycia, typowym przykładem jest zapytanie jednostek o określoną wartość pola, np. Pole treści, jak pokazano w pierwszym przykładzie.
Zaletą jest to, że działa bez względu na to, jakiego miejsca przechowywania używasz. Na przykład możesz mieć swoje pola w MongoDB, a EntityQuery będzie nadal działać, podczas gdy ręczne sprawdzanie danych pola_danych_body nie.
źródło
Za pomocą klasy EntityFieldQuery można wyszukiwać w bazie danych i pobierać wyniki w postaci listy podobnej do
node_load_multiple()
.Można to osiągnąć poprzez utworzenie klasy, zastosowanie warunków i wykonanie zapytania, na przykład:
Spowoduje to wygenerowanie tablicy, takiej jak:
Aby pobrać identyfikator z tablicy wyników, można użyć:
current(current($result))->tid
.Oto bardziej zaawansowany przykład:
Zobacz: Jak korzystać z EntityFieldQuery na Drupal.org, aby uzyskać więcej wyjaśnień.
źródło