Я звик використовувати db_select в друпалі 7, але тепер вона застаріла в Drupal 8
Отже, якщо мені потрібно створити запит до списку всіх користувачів з users_field_data
table, Що я повинен робити?
Я все ще користуюся db_select
або db_query
хоча вони є застарілими функціями? Або створіть новий контролер для розширення від "Select class
"і зробіть запит?
Відповіді:
12 для відповіді № 1Залежить від того, що ви намагаєтеся досягти.
Використання об'єкта зберігання
Якщо ви хочете зробити простий запит про користувачів, ви повинні використовувати loadByProperties об'єкта зберігання
$users = Drupal::entityTypeManager()->getStorage("user")->loadByProperties([
"name" => "bar"
]);
Використовуючи запит сутності & loadMultiple
Якщо вам потрібний більш складний запит з групами сортування, діапазону, пейджера та OR / AND, ви повинні використовувати запит сутності
$ids = Drupal::entityQuery("user")->condition("name", "foo")->execute();
$users = User::loadMultiple($ids);
6 для відповіді № 2
Як зазначено в документації, ви можете запитувати дані шляхом введення класу підключення до бази даних Drupal.
use DrupalCoreDatabaseConnection;
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(" ... ");
}
}
6 за відповідь № 3
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();