Выполнять запросы к базе данных обычное дело в разработке модулей для друпал.
Можете добавить в закладку эту страницу, чтобы всегда иметь под рукой шпаргалку, как в Drupal 8 выполнять MySQL запросы select, insert, update, delete.
Select
Получить одно значение:
$query = \Drupal::database()->select('node_field_data', 'n'); $query->addField('n', 'nid'); $query->condition('n.title', 'About Us'); $query->range(0, 1); $nid = $query->execute()->fetchField();
Получить одну строку значений:
$query = \Drupal::database()->select('node_field_data', 'n'); $query->fields('n', ['nid', 'title']); $query->condition('n.type', 'page'); $query->range(0, 1); $vegetable = $query->execute()->fetchAssoc();
Вы также можете использовать ->fetchObjec(), ->fetchAll() чтобы получать данные в объекте, а не в массиве.
Использование LIKE в запросе
$query = \Drupal::database()->select('node_field_data', 'n'); $query->fields('n', ['nid', 'title']); $query->condition('n.type', 'page'); $query->condition('n.title', $query->escapeLike('About') . '%', 'LIKE'); $vegetable = $query->execute()->fetchAllKeyed();
Select-запрос с JOIN:
$query = \Drupal::database()->select('node_field_data', 'n'); $query->fields('n', ['nid', 'title']); $query->addField('u', 'name'); $query->join('users_field_data', 'u', 'u.uid = n.uid'); $query->condition('n.type', 'page'); $vegetable = $query->execute()->fetchAllAssoc('nid');
Ниже примеры других запросов к БД insert, update, upsert и delete. Эти запросы могут быть полезны для работы с кастомными таблицами. Но лучше подумайте дважды прежде чем использовать кастомные таблицы. Лучше всего использовать API друпала или contrib'ные модули. Но если все же вы решили писать кастомные запросы к базе, то ниже вы найдете примеры.
Insert
$query = \Drupal::database()->insert('flood'); $query->fields([ 'event', 'identifier' ]); $query->values([ 'My event', 'My indentifier' ]); $query->execute();
Вы можете вызывать values() несколько раз, чтобы вставить несколько записей за раз.
Update
$query = \Drupal::database()->update('flood'); $query->fields([ 'identifier' => 'My new identifier' ]); $query->condition('event', 'My event'); $query->execute();
Upsert
$query = \Drupal::database()->upsert('flood'); $query->fields([ 'fid', 'identifier', ]); $query->values([ 1, 'My indentifier for upsert' ]); $query->key('fid'); $query->execute();
Метод key() должен быть использован для описания имени поля, которое будет использовано для определения существующей записи. То есть вам не нужно писать condition(), вы можете использовать метод key(). Поле используемое в методе key() должно быть уникальным, например как nid, uid, tid, fid или другие id сущностей. Если ключа не будет существовать, то вместо обновления записи, произойдет вставка новой записи с указанным ключом.
Delete
$query = \Drupal::database()->delete('flood'); $query->condition('event', 'My event'); $query->execute();
Вот собственно и все. Если вам нужно больше примеров пишите в комментариях. В следующих уроках мы разберем как использовать кастомные запросы к БД Drupal на практике.
Комментарии
Добавить комментарий
А что, если надо вызвать
А что, если надо вызвать функцию или процедуру?
Вы можете вызывать где угодно
Вы можете вызывать где угодно запросы к базе. Только не стоит это делать в шаблонах.
А как выглядит этот вызов?
А как выглядит этот вызов? Можно дополнить статью примерами?
Заранее спасибо!
Лучше всего примеры смотреть
Лучше всего примеры смотреть в модуле Examples:
https://www.drupal.org/project/examples
Там на все Drupal API есть примеры.