How to create a query in Drupal 8

前端 未结 3 1886
情话喂你
情话喂你 2021-02-13 21:18

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,

相关标签:
3条回答
  • 2021-02-13 21:33

    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(" ... ");   
      }
    
    }
    
    0 讨论(0)
  • 2021-02-13 21:40

    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();
    
    0 讨论(0)
  • 2021-02-13 21:42

    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);
    
    0 讨论(0)
提交回复
热议问题