Конструктор запросов db_select позволяет абстрагироваться от движка базы данных. Если запрос довольно сложный, то на этапе тестирования может потребоваться, что называется, убедиться в том, что конечный запрос на языке SQL к базе именно тот, что вы ожидаете.
Класс SelectQuery даёт эту возможность через реализацию магического метода __toString().
Покажу на коротком примере как это работает:
1 2 3 4 5 6 7 8 9 10 |
$q = db_select('node', 'n'); $q = $q->fields('n', array('nid')) ->condition('n.type', 'banner') ->condition('n.status', NODE_PUBLISHED) ->orderRandom() ->range(0, 1); $sqlString = (string) $q; // для вывода воспользуемся функцией модуля Devel dpm($sqlString); |
Мы получим следующую строку запроса:
1 2 3 4 5 |
SELECT n.nid AS nid, RAND() AS random_field FROM {node} n WHERE (n.type = :db_condition_placeholder_0) AND (n.status = :db_condition_placeholder_1) ORDER BY random_field ASC LIMIT 1 OFFSET 0 |
Как видите это не сам запрос, но вполне читаемый SQL шаблон. Для вывода значений подставляемых плейсхолдеров, воспользуйтесь функцией SelectQuery::arguments().
1 |
dpm($q->arguments()); |