4 Les requêtes¶
4.1 Effectuer une requête de lecture¶
4.1.1 L’objet Query¶
Une requête s’effectue en récupérant l’objet CCMBenchmark\Ting\Query\Query
via le Repository.
Pour ce faire il suffit d’appeler :
use CCMBenchmark\Ting\Repository\Repository;
use CCMBenchmark\Ting\Repository\MetadataInitializer;
class SampleRepository extends Repository implements MetadataInitializer
{
public function getUsers()
{
$query = $this->getQuery('SELECT ...');
// ...
4.1.2 Les paramètres¶
Pour mettre des paramètres dynamiques dans la requête il faut utiliser la méthode
setParams
qui prend en argument un tableau associatif :
use CCMBenchmark\Ting\Repository\Repository;
use CCMBenchmark\Ting\Repository\MetadataInitializer;
class SampleRepository extends Repository implements MetadataInitializer
{
public function getUserSylvain()
{
$query = $this->getQuery('SELECT id, name FROM user WHERE name = :name');
$query->setParams(['name' => 'Sylvain']);
// ...
4.1.3 Exécuter la requête¶
Pour retourner les données de lecture il faut utiliser la méthode query
:
use CCMBenchmark\Ting\Repository\Repository;
use CCMBenchmark\Ting\Repository\MetadataInitializer;
class SampleRepository extends Repository implements MetadataInitializer
{
public function getUserSylvain()
{
$query = $this->getQuery('SELECT id, name FROM user WHERE name = :name');
$query->setParams(['name' => 'Sylvain']);
$collection = $query->query();
// ...
4.1.4 Récupérer les résultats¶
La méthode query
retourne un objet CCMBenchmark\Ting\Repository\Collection
.
Cet objet est un Iterator
, vous pouvez donc récupérer les résultats de cette façon :
use CCMBenchmark\Ting\Repository\Repository;
use CCMBenchmark\Ting\Repository\MetadataInitializer;
class SampleRepository extends Repository implements MetadataInitializer
{
public function showUsersSylvain()
{
$query = $this->getQuery('SELECT id, name FROM user WHERE name = :name');
$query->setParams(['name' => 'Sylvain']);
$collection = $query->query();
foreach ($collection as $data) {
print_r($data);
}
}
// ...
4.1.5 Explication sur le format retourné¶
Voir la documentation concernant les hydrateurs
4.1.6 Format de retour simplifié pour des requêtes sans jointures¶
Voir la documentation concernant l”hydration pour un seul objet
4.1.7 Compter les éléments d’une collection¶
Il faut savoir qu’une Collection
implémente l’interface standard Countable
. Vous pouvez donc savoir combien elle a d’éléments comme vous le faites pour un tableau PHP : count($collection)
4.1.8 Exécuter une requête sur le master¶
Une requête de lecture s’effectuera par défaut sur un des slaves configurés (si des slaves ont été configurés), si vous avez besoin
d’effectuer votre requête sur le master, alors il faut appeler la méthode selectMaster
:
use CCMBenchmark\Ting\Repository\Repository;
use CCMBenchmark\Ting\Repository\MetadataInitializer;
class SampleRepository extends Repository implements MetadataInitializer
{
public function selectOnMaster()
{
$query = $this->getQuery('SELECT ...');
$query->selectMaster(true);
// ...
4.1.9 Erreur sur une requête¶
Si la requête exécutée ne se termine pas correctement, une exception du type CCMBenchmark\Ting\Driver\QueryException
sera levée
4.2 Effectuer une requête d’écriture¶
La logique reste la même que pour une requête de lecture, à quelques différences près.
Il faut appeler la méthode execute
sur l’objet CCMBenchmark\Ting\Query\Query
use CCMBenchmark\Ting\Repository\Repository;
use CCMBenchmark\Ting\Repository\MetadataInitializer;
class SampleRepository extends Repository implements MetadataInitializer
{
public function insertSomething()
{
$query = $this->getQuery('INSERT INTO ...');
$query->execute();
// ...