Drupal interactúa constantemente con una base de datos determinada, todos los comentarios, contenidos y demás elementos de drupal se encuentran almacenados y drupal rescata esta información para mostrar estos datos.
Dentro de drupal encontramos una capa de abstracción que “protege” a drupal de las diferencias existentes entre la ingeniería de las diferentes bases de datos, gracias a esta capa podemos escribir un mismo código independientemente de la base de datos con la que estemos trabajando además de prevenir posibles ataques SQL inyection.Basada en objetos PDO (PHP´s Data Object) y en el principio de que la escritura SQL es más conveniente que aprender una sintaxis nueva.
En versiones anteriores de drupal realizaríamos nuestras consultas de la siguiente forma:
$result = db_query('SELECT name FROM {role} WHERE rid = :rid', array(':rid' => 2));
Esta forma de construir nuestras consultas puede servirnos perfectamente hasta cierto punto , pero ¿Cómo nos defendemos de consultas más complicadas?.Unas de las características de Drupal 7 es la posibilidad de crear query objects mediante un query builder que harán mas manejables estas consultas complejas.De esta forma podríamos reescribir nuestra consulta anterior de la siguiente forma :
$query = db_select('role', 'r'); $result = $query ->condition('rid',2) ->fields('r',array('name')) ->execute();
Ordenando resultados
Para ordenar el resultado de nuestra consulta simplemente usamos el método orderBy, si quisiéramos por ejemplo ordenar los resultados por name ascendentemente haríamos lo siguiente:
$query = db_select('role', 'r'); $result = $query ->condition('rid',2) ->fields('r',array('name')) ->orderBy('name', 'ASC') ->execute();
Paginando resultados
Paginar resultados en drupal es extremádamente fácil.Supongamos que queremos mostrar un listado de todas nuestras nuestros nodos de tipo page, probablemente recibamos decenas de filas como resultado y por tanto necesitamos paginar los resultados por usabilidad.Para llegar a nuestro objetivo en primer lugar crearemos un menu item (ver el artículo anterior) y definiremos nuestra callback para mostrar los resultados que buscamos de la siguiente forma:
/** * Page callback */ function mimodulo_micallback(){ //Creamos el query object y extendemos el object para que use un paginador por defecto $query = db_select('node','n')->extend('PagerDefault'); //Construimos nuestra query indicando el número de elementos que //queremos que aparezcan por página. $query ->condition('type','page') ->fields('n',array('title')) ->limit(5); $result= $query ->execute(); //Iteramos sobre los resultados para contruir la cadena que devolveremos $output = ''; foreach ($result as $row) { $output .= $row->title."</br>"; } //LLamamos a la función de tematización y aplicamos el tema de paginación a //nuestra salida y retornamos $output .= theme('pager'); return $output; }
Si todo ha ido bien , habremos obtenido nuestro paginador funcionando tal como se muestra en la figura y el cual nos ha sido muy facil crear
Fuente : Pro Drupal 7 Development