Я использую db_select в drupal 7, но теперь он устарел в drupal 8
Итак, если мне нужно создать запрос, чтобы перечислить всех пользователей из таблицы users_field_data
, что мне делать?
Я все еще использую db_select
или db_query
хотя они являются устаревшими функциями? Или создать новый контроллер для расширения от « Select class
» и сделать мой запрос?
Зависит от того, чего вы пытаетесь достичь.
Если вы хотите сделать простой запрос о пользователях, то вы должны использовать loadByProperties объекта хранения
$users = \Drupal::entityTypeManager()->getStorage('user')->loadByProperties([ 'name' => 'bar' ]);
Если вам нужен более сложный запрос с группами сортировки, диапазона, пейджера и OR / AND, вы должны использовать запрос объекта
$ids = \Drupal::entityQuery('user')->condition('name', 'foo')->execute(); $users = User::loadMultiple($ids);
Как упоминалось в документации, вы можете запрашивать данные, введя класс подключения базы данных Drupal. Например:
use Drupal\Core\Database\Connection; class DatabaseQueryExample { protected $connection; public function __construct(Connection $connection) { $this->connection = $connection; } public function queryExamples() { // db_query() $this->connection->query(" ... "); // db_select() $this->connection->select(" ... "); } }
db_select, db_insert, db_update и т. д. были лишены Drupal 8.0.x, будут удалены в Drupal 9.0.0. Вместо этого вы получите подключение к базе данных, введенное в вашу службу из контейнера, и вызовите select (). Например, $ injected_database-> select ($ table, $ alias, $ options);
например:
$db = \Drupal::database(); $data = $db->select('table_name','t')->fields('t')->execute(); $db->insert(); $db->update();