Campos
Добавить поле
Чтобы добавить поле в запрос Select, используйте метод addField():
$title_field = $query->addField('n', 'title', 'my_title');
Приведенный выше код даст команду запросу выбрать поле «title» таблицы с псевдонимом «n» и присвоить ему псевдоним «my_title». Если псевдоним не указан, он будет создан автоматически. В подавляющем большинстве случаев сгенерированный псевдоним будет просто именем поля. В этом примере это будет «заголовок». Если этот псевдоним уже существует, псевдонимом будет имя таблицы и имя поля. В этом примере это будет "n_title". Если этот псевдоним уже существует, к псевдониму будет добавлен счетчик, пока не будет найден неиспользуемый псевдоним, например «n_title_2».
Обратите внимание, что если вы создаете и заполняете запрос самостоятельно и не указываете псевдоним, а псевдоним по умолчанию недоступен, в вашем коде почти наверняка есть ошибка. Однако, если вы пишете реализацию hook_query_alter(), вы не можете точно знать, какие псевдонимы уже используются, поэтому вы всегда должны использовать сгенерированный псевдоним.
Добавить несколько полей
Чтобы выбрать несколько полей, вызывайте addField() несколько раз в нужном порядке. Обратите внимание, что в большинстве случаев порядок полей не должен иметь значения, и если это имеет значение, то, скорее всего, имеется изъян в бизнес-логике модуля.
В качестве альтернативы вы можете использовать метод fields() для добавления нескольких полей одновременно.
$query->fields('n', ['nid', 'title', 'created', 'uid']);
Вышеуказанный метод эквивалентен вызову addField() четыре раза, по одному разу для каждого поля. Однако fields() не поддерживает указание псевдонима для поля. Он также возвращает сам объект запроса, так что метод может быть объединен в цепочку, а не возвращать любые сгенерированные псевдонимы. Если вам нужно знать сгенерированный псевдоним, используйте addField() или getFields() для доступа к необработанной структуре внутренних полей.
Вызов fields() без списка полей приведет к запросу «SELECT*».
$query->fields('n');
Isso incluirá "n.*" na lista de campos da consulta. Note que aliases não serão criados. Se a tabela usando SELECT * contiver campo que também é especificado diretamente de outra tabela pode ocorrer colisão de nomes no result set — ele conterá apenas um dos campos com nome comum. Por isso SELECT * não é recomendado.
Вернуть только одно поле, используя fetchField
Используйте метод fetchField для возврата только одного поля с запросом, например, следующее. (слегка глупый пример)
$query = $connection->select('node', 'n');
$query->condition('n.nid', 123);
$query->addField('n', 'title');
$result = $query->execute();
return $result->fetchField();