Hero

Como depurar EntityFieldQuery en Drupal 7

Febrero 13, 2013

kenneth
APIs
Drupal

En Drupal 7 el utilizar la clase EntityFielQuery nos facilita mucho los procesos de creación de consultas a la base de datos, al tratar todo como si fuese una entidad. Pero en ciertas situaciones es necesario verificar el código SQL que esta generándose al emplear EntityFielQuery, desafortunadamente la clase EntityFielQuery no posee el metodo mágico ‘__toString()‘.

  1. Agregando un tag al query.

Implementando el hook hook_query_TAG_alter tendremos acceso al objecto de tipo QueryAlterableInterface que se crea antes de ejecutar la consulta empleando el EntityFieldQuery, el primero sera crear una instancia de la clase EntityFieldQuery, si tienes dudas sobre como crear consultas con el EntityFieldQuery puedes ver la entrada al blog ”Introducción a EntityFieldQuery para Drupal 7“.

<pre title="Usando EntityFieldQuery">$query = new EntityFieldQuery();

Posteriormente antes de llamar al metodo “execute()”, debemos emplear el metodo “addTag()” el cual nos permitirá utilizar el hook_query_TAG_alter que nos brinda Drupal, podemos usar el siguiente código:

<pre title="Utilizando el metodo 'addTag()'">->addTag('my_tag')
->execute();
  1. Implementación del hook_query_TAG_alter.

En este momento solo nos falta implementar en nuestro ‘modulo_personalizado’ el hook_query_TAG_alter, podemos utilizar el siguiente código:

<pre title="Implementando hook_query_TAG_alter(QueryAlterableInterface $query)">function modulo_personalizado_query_my_tag_alter(QueryAlterableInterface $query){
 watchdog('modulo_personalizado', '$query: ' . dpr($query, 1));
 watchdog('modulo_personalizado', 'SQL: ' . $query->__toString());
}

De esta manera podemos tener acceso a la variable $query que si cuenta con el metodo mágico ‘__toString()’ y observar el código SQL generado por nuestro objecto de EntityFieldQuery. Eventualmente podríamos modificar desde esta función nuestra consulta si fuera necesario,

Espero que les sea de mucha ayuda,

Recibe consejos y oportunidades de trabajo 100% remotas y en dólares de weKnow Inc.