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();

        // ...