Estoy construyendo una consulta usando db_select();
Ahora necesito ordenar mi resultado por un campo que agregué usando campos. ¿Hay alguna manera mejor que unir field_data_field_fieldname y revision?
Esperaba algo como $query->addFieldData("field_foo", "myfoo");
para poder simplemente $query->orderBy('myfoo', 'asc');
También me pregunto por qué no hay ningún ejemplo en la API que se una a los campos de nodos.
Que yo sepa, db_select()
no tiene conocimiento de entidades o campos (campos, en el contexto del campo que se agregan a los nodos, etc.)
Imagino que necesitaría hacer las uniones a las tablas de campo usted mismo. Encontré un pequeño ejemplo de dbtng_example - dbtng_example.module , pero según mi corazonada y comentarios a continuación - EntityFieldQuery
es en realidad la única forma correcta de hacer esto. Los campos pueden definir su propio almacenamiento que rompería por completo su db_select, así que ...
Con un poco de impacto en el rendimiento (que es insignificante para la mayoría) realmente debería hacerlo de la Drupal 7 vías ...
Drupal 7 ahora tiene Fields en el núcleo, y con eso vino EntityFieldQuery , que es una clase de consulta para encontrar entidades (como nodos, términos, etc.) por sus propiedades (como estado publicado) o campos (como field_page_photo o cualquier otro campo que agregue a través de la interfaz de usuario o de otro modo)
o de API:
Esta clase permite buscar entidades en función de las propiedades de la entidad (por ejemplo, nodo-> cambiado), valores de campo y metadatos genéricos de la entidad (paquete, tipo de entidad, ID de entidad e ID de revisión).
Algunos buenos ejemplos y discusión aquí:
¿Cuál es el uso adecuado de EntityFieldQuery?
y me encuentro haciendo referencia a ¿Necesitamos un ejemplo de EntityFieldQuery? también.