No Drupal 7, a documentação da API para node_load_multiple()especifica o uso do $conditionsparâmetro foi descontinuada em favor do uso EntityFieldQuery. Como alguém usa a classe para gerar uma lista de IDs de nós para uso node_load_multiple()? Existem outros casos de uso para isso?
O EntityFieldQuery usa um conjunto de ganchos para fazer interface com os módulos de armazenamento de campo, como o Armazenamento em Campo SQL, para trabalhar com campos e outras propriedades do nó. A longo prazo, EntityFieldQuery é uma maneira muito mais confiável de consultar qualquer tipo de entidade e, em algumas situações, pode executar consultas entre entidades (consulte field_has_data ou _list_values_in_use () para obter um exemplo.
Aqui está um exemplo simples de uso do EntityFieldQuery para obter uma lista de todos os nós publicados antes de um carimbo de data / hora específico:
field_has_data é um exemplo mais agradável do que imo _list_values_in_use
15
Encontrei um problema no Drupal sobre como adicionar exemplos para EntityFieldQuery. Eu tenho usado isso para exemplos, bem como para expressar minha opinião na solicitação de mais exemplos.
Cuidado, o método fieldOrderBy deixará de fora todos os nós que tiverem o campo relacionado vazio. O que é confuso, porque isso deve classificar e não filtrar (você esperaria que os nós com o campo vazio estivessem na parte superior ou inferior do conjunto de resultados). Mais informações e, esperançosamente, uma correção pode ser encontrada aqui drupal.org/node/1611438 e aqui drupal.org/node/1662942
Isso seleciona nós cujo campo do corpo começa com "A". Consulte também EntityFieldQuery :: execute () sobre como usar o resultado retornado.
Existem muitos casos de uso, o exemplo típico é consultar entidades para obter um valor de campo específico, como o campo body, como mostrado no primeiro exemplo.
A vantagem é que ele funciona em qualquer armazenamento de campo que você estiver usando. Por exemplo, você pode ter seus campos no MongoDB e o EntityQuery ainda funcionará, enquanto a consulta manual de field_data_body não funcionaria.
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',)),),)
Para buscar a identificação da matriz resultado, você pode usar: current(current($result))->tid.
Aqui está um exemplo mais avançado:
<?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);}?>
Encontrei um problema no Drupal sobre como adicionar exemplos para
EntityFieldQuery
. Eu tenho usado isso para exemplos, bem como para expressar minha opinião na solicitação de mais exemplos." Precisamos de um exemplo de EntityFieldQuery? "
O comentário # 11 mostra o uso de
node_load_multiple()
como visto abaixo:fonte
Aqui está um exemplo de um dos módulos de teste:
http://api.drupal.org/api/drupal/modules--node--tests--node_access_test.module/function/node_access_entity_test_page/7
Isso seleciona nós cujo campo do corpo começa com "A". Consulte também EntityFieldQuery :: execute () sobre como usar o resultado retornado.
Existem muitos casos de uso, o exemplo típico é consultar entidades para obter um valor de campo específico, como o campo body, como mostrado no primeiro exemplo.
A vantagem é que ele funciona em qualquer armazenamento de campo que você estiver usando. Por exemplo, você pode ter seus campos no MongoDB e o EntityQuery ainda funcionará, enquanto a consulta manual de field_data_body não funcionaria.
fonte
Você pode usar a classe EntityFieldQuery para consultar o banco de dados e buscar os resultados em forma de lista semelhante a
node_load_multiple()
.Isso pode ser conseguido criando uma classe, aplicando as condições e executando a consulta, por exemplo:
Isso irá gerar a matriz como:
Para buscar a identificação da matriz resultado, você pode usar:
current(current($result))->tid
.Aqui está um exemplo mais avançado:
Veja: Como usar o EntityFieldQuery no Drupal.org para obter mais explicações.
fonte