web-dev-qa-db-fra.com

Comment limiter le nombre de lignes affectées par la requête?

Dans mon module personnalisé pour Drupal 8, j'utilise le code suivant.

$query = $this->connection->select('node_field_data', 'nf_data');
$result = $query->execute();

Je veux obtenir les 500 premières lignes. J'ai essayé avec $query->limit(50), mais cela donne l'erreur suivante.

Appel à la méthode non définie Drupal\Core\Database\Driver\mysql\Select :: limit ()

Quel est le bon code pour obtenir les 500 premières lignes?

4
Diana
11
Kevin

L'objet renvoyé par $this->connection->select() est un objet d'une classe qui étend \Drupal\Core\Database\Query\Select (pas \Drupal\Core\Entity\Query\QueryInterface qui est pour requêtes d'entité). Dans votre cas, puisque vous utilisez MySQL comme moteur de base de données, cette classe est spécifiquement \Drupal\Core\Database\Driver\mysql\Select , comme l'indique l'erreur que vous avez citée.

La méthode que vous recherchez est Select::range() .

Vous le confondez avec PagerSelectExtender::limit() , utilisé pour limiter le nombre d'éléments par page, et implémenté à partir de la classe PagerSelectExtender . Pour utiliser cette méthode, vous devez cependant ajouter un pageur à la requête.

2
kiamlaluno