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