/ / Як створити запит у Drupal 8 - php, mysql, drupal, drupal-8

Як створити запит у Drupal 8 - php, mysql, drupal, drupal-8

Я звик використовувати 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();