Как создать запрос в Drupal 8

Я привык использовать db_select в Drupal 7, но теперь он не рекомендуется в Drupal 8

Итак, если мне нужно создать запрос, чтобы вывести список всех пользователей из users_field_data таблица, что мне делать?

Я все еще использую db_select или же db_query даже если они устарели функции? Или создайте новый контроллер для расширения из «Select class«и сделать мой запрос?

9

Решение

Зависит от того, что вы пытаетесь достичь.


Использование объекта хранения

Если вы хотите сделать простой запрос о пользователях, вы должны использовать loadByProperties объекта хранилища

$users = \Drupal::entityTypeManager()->getStorage('user')->loadByProperties([
'name' => 'bar'
]);

Использование запроса сущности & loadMultiple

Если вам нужен более сложный запрос с группами условий сортировки, диапазона, пейджера и OR / AND, вы должны использовать запрос сущности

$ids = \Drupal::entityQuery('user')->condition('name', 'foo')->execute();
$users = User::loadMultiple($ids);
15

Другие решения

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();
8

Как упомянуто в документации, вы можете запрашивать данные, внедряя класс соединения с базой данных 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(" ... ");
}

}
7
По вопросам рекламы [email protected]