En Drupal 7, la documentación de la API para node_load_multiple()especificar el uso del $conditionsparámetro ha quedado en desuso a favor del uso EntityFieldQuery. ¿Cómo se usa la clase para generar una lista de ID de nodo para usar node_load_multiple()? ¿Hay otros casos de uso para ello?
EntityFieldQuery usa un conjunto de enlaces para interactuar con los módulos de almacenamiento de campo, como Field SQL Storage, para trabajar para campos y otras propiedades de nodo. A largo plazo, EntityFieldQuery es una forma mucho más confiable de consultar cualquier tipo de entidad, y en algunas situaciones puede realizar consultas entre entidades (consulte field_has_data o _list_values_in_use () para ver un ejemplo.
Aquí hay un ejemplo simple del uso de EntityFieldQuery para obtener una lista de todos los nodos publicados antes de una marca de tiempo específica:
field_has_data es un ejemplo más agradable que _list_values_in_use
15
Encontré un problema en Drupal sobre agregar ejemplos para EntityFieldQuery. Lo he estado usando para ejemplos, así como para expresar mi opinión sobre la convocatoria de más ejemplos.
Precaución, el método fieldOrderBy dejará fuera cualquier nodo que tenga el campo relacionado vacío. Lo cual es confuso porque se supone que esto solo ordena y no filtra (esperaría que los nodos con el campo vacío estén en la parte superior o inferior del conjunto de resultados). Puede encontrar más información y, con suerte, una solución aquí drupal.org/node/1611438 y aquí drupal.org/node/1662942
Mario Awad
9
Aquí hay un ejemplo de uno de los módulos de prueba:
Esto selecciona nodos cuyo campo de cuerpo comienza con "A". Vea también EntityFieldQuery :: execute () sobre cómo usar el resultado devuelto.
Hay muchos casos de uso, el ejemplo típico es consultar entidades para un valor de campo específico como el campo del cuerpo como se muestra en el primer ejemplo.
La ventaja es que funciona independientemente del campo_almacenamiento que esté utilizando. Por ejemplo, puede hacer que sus campos en MongoDB y EntityQuery sigan funcionando mientras que la consulta de field_data_body no lo haría manualmente.
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 el ID de la matriz de resultados, puede utilizar: current(current($result))->tid.
Aquí hay un ejemplo más avanzado:
<?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);}?>
Encontré un problema en Drupal sobre agregar ejemplos para
EntityFieldQuery
. Lo he estado usando para ejemplos, así como para expresar mi opinión sobre la convocatoria de más ejemplos." ¿Necesitamos un ejemplo de EntityFieldQuery? "
El comentario # 11 muestra el uso de
node_load_multiple()
como se ve a continuación:fuente
Aquí hay un ejemplo de uno de los módulos de prueba:
http://api.drupal.org/api/drupal/modules--node--tests--node_access_test.module/function/node_access_entity_test_page/7
Esto selecciona nodos cuyo campo de cuerpo comienza con "A". Vea también EntityFieldQuery :: execute () sobre cómo usar el resultado devuelto.
Hay muchos casos de uso, el ejemplo típico es consultar entidades para un valor de campo específico como el campo del cuerpo como se muestra en el primer ejemplo.
La ventaja es que funciona independientemente del campo_almacenamiento que esté utilizando. Por ejemplo, puede hacer que sus campos en MongoDB y EntityQuery sigan funcionando mientras que la consulta de field_data_body no lo haría manualmente.
fuente
Puede usar la clase EntityFieldQuery para consultar la base de datos y obtener los resultados en forma de lista similar a
node_load_multiple()
.Esto se puede lograr creando una clase, aplicando las condiciones y ejecutando la consulta, por ejemplo:
Esto generará la matriz como:
Para buscar el ID de la matriz de resultados, puede utilizar:
current(current($result))->tid
.Aquí hay un ejemplo más avanzado:
Consulte: Cómo usar EntityFieldQuery en Drupal.org para obtener más explicaciones.
fuente