Каково правильное использование EntityFieldQuery?

В Drupal 7 документация API для node_load_multiple () указывает, что параметр $ conditions устарел в пользу использования EntityFieldQuery. Как использовать класс для создания списка идентификаторов узлов для использования с node_load_multiple ()? Есть ли другие варианты использования?

36 голосов | спросил user7 2 MarpmWed, 02 Mar 2011 23:51:05 +03002011-03-02T23:51:05+03:0011 2011, 23:51:05

4 ответа


33

EntityFieldQuery использует набор перехватов для взаимодействия с модулями хранения полей, такими как Field SQL Storage, для работы с полями, а также с другими свойствами узла. Долгосрочный EntityFieldQuery является гораздо более надежным способом запроса любого типа сущности, и в некоторых ситуациях он может выполнять запросы на основе сущности (см. field_has_data или _ list_values_in_use () для примера.

Вот простой пример использования EntityFieldQuery для получения списка всех узлов, опубликованных до определенной временной метки:

$ query = new EntityFieldQuery ();

$ запрос
  -> entityCondition ('entity_type', 'node', '=')
  -> свойствоCondition ('status', 1, '=')
  -> свойствоCondition ('created', '1294694496', '<');

$ result = $ query-> execute ();

$ результаты этого запроса выглядят примерно так:

Массив
(
    [node] => массив
        (
            [1] => Объект stdClass
                (
                    [nid] => 1
                    [vid] => 49
                    [type] => статья
                )

            [2] => Объект stdClass
                (
                    [nid] => 2
                    [vid] => 2
                    [type] => страница
                )

        )

)

Затем вы можете использовать этот массив для ввода в node_load_multiple:

$ nodes = node_load_multiple (array_keys ($ result ['node']));
ответил Mikey P 3 MaramThu, 03 Mar 2011 00:09:49 +03002011-03-03T00:09:49+03:0012 2011, 00:09:49
14

Я нашел проблему с Drupal о добавлении примеров для EntityFieldQuery. Я использую его для примера, а также выскажу свое мнение о вызове для большего количества примеров.

" Нужен ли нам пример EntityFieldQuery? "

комментарий № 11 показывает использование node_load_multiple (), как показано ниже:

$ query = new EntityFieldQuery ();
$ entities = $ query-> entityCondition ('entity_type', 'node')
                        -> entityCondition ('bundle', 'event')
                        -> свойствоCondition ('status', 1)
                        -> fieldCondition ('field_date', 'value', array ('2011-03-01', '2011-03-31'), 'BETWEEN')
                        -> fieldOrderBy ('field_date', 'value', 'ASC')
                        - > выполнение ();

$ nodes = entity_load ('node', array_keys ($ entities ['node']));
return node_view_multiple ($ nodes, 'teaser');
ответил electblake 15 MarpmTue, 15 Mar 2011 20:36:39 +03002011-03-15T20:36:39+03:0008 2011, 20:36:39
9

Вот пример из одного из тестовых модулей:

http: //api.drupal. орг /API /друпал /модули - узел - тесты - node_access_test.module /функция /node_access_entity_test_page /7

Это выбирает узлы, чье поле тела начинается с «A». См. Также EntityFieldQuery :: выполнить () в как использовать возвращенный результат.

Существует много случаев использования, типичным примером является запрос объектов для определенного значения поля, такого как поле тела, как показано в первом примере.

Преимущество заключается в том, что он работает независимо от используемого поля field_storage. Например, вы можете иметь свои поля в MongoDB, а EntityQuery все равно будет работать, а запрос field_data_body вручную не будет.

ответил Berdir 3 MaramThu, 03 Mar 2011 00:02:55 +03002011-03-03T00:02:55+03:0012 2011, 00:02:55
0

Вы можете использовать класс EntityFieldQuery для запросить базу данных и получить результаты в виде списка, аналогичного Как использовать EntityFieldQuery на Drupal.org для более подробного объяснения.

ответил kenorb 9 MarpmWed, 09 Mar 2016 22:39:01 +03002016-03-09T22:39:01+03:0010 2016, 22:39:01

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132