Из предыдущего урока мы с вами научились создать и удалять таблицу в нашей БД, сегодня мы будем разбираться, как обращаться к БД.
Так же в прошлом уроке мы с вами создали модуль, я так же будут использовать его для наших примеров, только первоначально создам дополнительный блок для тестов, в который и будем выводить результаты наших запросов. Сам модуль, используемый в примере, вы сможете скачать в конце статьи. Так же вывел данный блок в основной регион.
Выборка единственной записи в строке с условием:
<?php
# Выборка единственной записи
$query = \Drupal::database()->select('users_field_data', 'ufd');
$query->addField('ufd', 'mail');
$query->condition('ufd.uid', 1);
$mail = $query->execute()->fetchField();
Где:
- addField() – содержит название поля для выборки
- condition() – условия выборки
Выборка нескольких записей в строке с условием:
<?php
# Выборка нескольких записей
$query = \Drupal::database()->select('users_field_data', 'ufd');
$query->fields('ufd', array('langcode', 'name', 'mail', 'created'));
$query->condition('ufd.uid', 1);
$output = $query->execute()->fetchAssoc();
Где:
- fields() – содержит массив с имена полей для выборки
Выборка с сортировкой по полю:
<?php
# Выборка с сортировкой по полю
$query = \Drupal::database()->select('database_ex', 'de');
$query->fields('de', array('id', 'uid', 'text', 'timestamp'));
$query->orderBy('de.id', 'DESC');
$output = $query->execute()->fetchAll();
Где:
- orderBy() – содержит имя поля, по которому необходимо сортировать и значение сортировки ASC, DESC
Выбрать определенное кол-во записей:
<?php
# Выбрать определенной кол-во записей
$query = \Drupal::database()->select('database_ex', 'de');
$query->fields('de', array('id', 'uid', 'text', 'timestamp'));
$query->orderBy('de.id', 'DESC');
$query->range(0, 1);
$output = $query->execute()->fetchAll();
Где:
- range() – содержит значения для ограничения выборки. Например в данном случае, запись говорит, что нужно получить только первую запись
Использование db like:
<?php
# Использование db like
# с учётом того, что заголовок страницы имеет название "Контакты"
$query = \Drupal::database()->select('node_field_data', 'nfd');
$query->fields('nfd', array('nid', 'title', 'status', 'created'));
$query->condition('nfd.type', 'page');
$query->condition('nfd.title', $query->escapeLike('Ко') . '%', 'LIKE');
$output = $query->execute()->fetchAllKeyed();
Использование JOIN:
<?php
$query = \Drupal::database()->select('node_field_data', 'nfd');
$query->fields('nfd', array('nid', 'title', 'status', 'created'));
$query->addField('ufd', 'name');
$query->addField('ufd', 'uid');
$query->join('users_field_data', 'ufd', 'ufd.uid = nfd.uid');
$query->condition('nfd.type', 'page');
$output = $query->execute()->fetchAllAssoc('nid');
Вставка данных в таблицу БД:
<?php
# Вставка данных в таблицу БД
$query = \Drupal::database()->insert('database_ex');
$query->fields(array(
'uid',
'text',
'timestamp',
));
$query->values(array(
'1',
'My custom text for example database',
time(),
));
$query->execute();
Хочу заметить, что первоначально определяется массив из имен полей для вставки,а дальше массив значений для вставки.
Обновление данных в таблице БД:
<?php
# Обновление данных в таблице БД
$query = \Drupal::database()->update('database_ex');
$query->fields(array(
'text' => 'My custom new text from update'
));
$query->condition('id', 1);
$query->execute();
Обновление данных в таблице БД, с проверкой на уникальность (существование) ключа:
<?php
# Обновление данных в таблице БД, с проверкой на уникальность ключа
$query = \Drupal::database()->upsert('database_ex');
$query->fields(array(
'id',
'uid',
'text',
'timestamp',
));
$query->values(array(
1,
1,
'Upsert custom text',
time(),
));
$query->key('id');
$query->execute();
Хочу заметить, что метод key() – должен использоваться для указания имени поля, которое будет использоваться для индентификации строки. Это поле должно иметь уникальное значение (например, с использованием автоинкримента), иначе upsert() будет использована как insert().
Удаление записи из БД:
<?php
# Удаление записи из БД
$query = \Drupal::database()->delete('database_ex');
$query->condition('id', '1');
$query->execute();
Использование статичного (static) запроса:
<?php
$query = db_query("SELECT * FROM {node} WHERE nid IN (1)");
$output = $query->fetchAll();
Это основной список запросов, которые вы будете использовать практически всегда при работе с БД. На этом можно закончить.
Скачать модуль используемый в примере
Комментарии (1)
Допустим я хочу выводит в блоке sid , я беру его из бд и вывожу в блоке , но после логаута и повторного логина в блоке остается старый сид а в бд само собой он меняется