Допустим, есть словарь с терминами (недавно с ними работал, поэтому с них и начну). У терминов есть дополнительные поля. Мы хотим получить список терминов, у которых значение поля имеет определенное значение.
Для терминов таксономии есть функция taxonomy_term_load_multiple($tids = array(), $conditions = array()). В параметре $conditions можно передавать ассоциативный массив 'имя поля'=>'значение поля' для фильтрации терминов, например:
taxonomy_term_load_multiple(array(), array('vid' => $vid));
Один маленький нюанс - поля можно указывать только те, что хранятся в таблице 'taxonomy_term_data'. Значит эта функция нам не поможет.
Нам на помощь придет класс EntityFieldQuery. Этот класс позволяет находить сущности на основании их свойств (значений полей).
Приведу пример кода для поставленной задачи:
$query = new EntityFieldQuery(); $query ->entityCondition('entity_type', 'taxonomy_term') //определим, какой тип сушности выводим ->propertyCondition('vid', 'номер словаря') //ограничим словарь ->fieldCondition('имя поля', 'value', 'значение поля', '='); //укажем значение поля $result = $query->execute();
Аналогичный алгоритм работы с любым типом сущностей.
Сортировка результатов
Сортировка по свойствам сущности:
EntityFieldQuery::propertyOrderBy($column, $direction = 'ASC')
Сортировка по полям сущности:
EntityFieldQuery::fieldOrderBy($field, $column, $direction = 'ASC')
Интересеный вариант, как добавить случайную сортировку к запросу (используется hook_query_TAG_alter()): https://eureka.ykyuen.info/2012/05/16/drupal-7-order-entityfieldquery-by...
Комментарии
Добавить комментарий