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,
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(" ... ");
}
}
db_select
, db_insert
, db_update
, etc... were deprecated in Drupal 8.0.x
and 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();
Depends on what you are trying to achieve.
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'
]);
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);