How to create a query in Drupal 8

2019-03-25 21:49发布

I am used to using db_select in drupal 7 but now it's deprecated in drupal 8

So, If I need to create a query to list all users from users_field_data table, What should I do?

Do I still use db_select or db_query even though they are deprecated functions? Or create a new controller to extend from "Select class" and make my query?

3条回答
乱世女痞
2楼-- · 2019-03-25 22:01

db_select,db_insert,db_update,etc were depricated in Drupal 8.0.x, will be removed in Drupal 9.0.0. Instead, get a database connection injected into your service from the container and call select() on it. For example, $injected_database->select($table, $alias, $options);

eg:

$db = \Drupal::database();

$data = $db->select('table_name','t')->fields('t')->execute();

$db->insert();

$db->update();
查看更多
老娘就宠你
3楼-- · 2019-03-25 22:04

As mentioned in the documentation you can query data by injecting Drupal's database connection class. For example:

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(" ... ");   
  }

}
查看更多
女痞
4楼-- · 2019-03-25 22:14

Depends on what you are trying to achieve.


Using the storage object

If you want to make a simple query about the users then you should use the loadByProperties of the storage object

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

Using entity query & loadMultiple

If you need a more complex query with sorts, range, pager and OR/AND condition groups you should use entity query

$ids = \Drupal::entityQuery('user')->condition('name', 'foo')->execute();
$users = User::loadMultiple($ids);
查看更多
登录 后发表回答