> CopixDAOSearchParams
fr

Présentation

L'objet CopixDAOSearchParams est utilisé dans les DAO pour réaliser des requêtes à condition (findBy, countBy, deleteBy).

Exemple :


//On récupère les nouvelles de catégorie 2
_ioDao ('maTable')->findBy (_daoSp ()->addCondition ('id_categorie', '=', 2));
 

Cet objet propose 6 méthodes :

addCondition

La méthode addCondition permet d'ajouter des restrictions à la recherche.

Elle accepte 4 paramètres qui sont :

Le nom du champ

Le nom du champ doit être celui que vous utilisez dans votre DAO. Si jamais vous avez défini un fichier XML, c'est le nom de la propriété name qu'il faudra utiliser, et non le nom réel du champ en base de données (fieldname).

Si vous utilisez un DAO automatique, le champ et sa représentation physique ayant le même nom, vous n'avez pas de question à vous poser.

La condition

Les conditions peuvent être tout type de comparaison supportée par les moteurs SQL, à savoir en général :

Cas particulier avec les valeurs null

Si vous spécifiez une valeur NULL avec un addCondition et un opérateur d'égalité ou de différence, Copix générera une requête SQL avec "IS" ou "IS NOT". Inutile donc de gérer vous même ces cas particulier de SQL.

exemple


//On compte le nombre de nouvelles sans catégories
_dao ('News')->findBy (_daoSp ()->addCondition ('category', '=', null));

//La requête SQL exécutée sera bien
//select .... from News where category IS NULL

//On compte le nombre de nouvelles avec une catégorie
_dao ('News')->findBy (_daoSp ()->addCondition ('category', '!=', null));
//ou _dao ('News')->findBy (_daoSp ()->addCondition ('category', '<>', null));

//La requête SQL exécutée sera bien
//select .... from News where category IS NOT NULL

 

AND / OR

Exemple d'utilisation des AND / OR avec addCondition


// On crée l'objet de critères
$criteres = _daoSp ()->addCondition ('author', '=', 'martin')
                  ->addCondition ('author', '=', 'dupont', 'or');

// On récupère le résultat => liste des news dont l'auteur est martin ou dupont
$resultats = _dao ('News')->findBy ($criteres);
 

Utiliser des tableaux en tant que valeur

Vous pouvez donner un tableau en tant que valeur pour les conditions. Si tel est le cas, Copix réagira comme si vous aviez appelé successivement addCondition avec un OR.

Exemple :


// Cette syntaxe avec un tableau...
_daoSp ()->addCondition ('author', '=', array ('martin', 'dupont', 'durand', 'copix'));
//est équivalente à

_daoSp ()->startGroup ()
         ->addCondition ('author', '=', 'martin')
         ->addCondition ('author', '=', 'dupont', 'or')
         ->addCondition ('author', '=', 'durand', 'or')
         ->addCondition ('author', '=', 'copix', 'or')
         ->endGroup ();
 

addSQL

Parfois, certaines condition de sélection sont impossibles à décrire avec un simple addCondition, et il est également dommage d'avoir recours à une surcharge de DAO pour ce faire.

Ainsi, il vous est possible de demander à ajouter des conditions SQL sur vos champs, de la façon suivante :


$sp = _daoSP ()->addCondition ('titre_test', '=', 'Titre 3')
               ->addSQL ('not exists (select * from copixtestautodao where titre_test = :titre_test)', array (':titre_test'=>2038));
 

La méthode addSQL accepte 3 paramètres :

groupBy

La méthode groupBy vous permet de spécifier quels champs seront utilisés pour grouper les résultats.

La méthode groupBy accepte autant de paramètres que de champs à grouper (dans l'ordre).


//grouper sur le champs field2
_daoSp()->groupBy ('field2');
//grouper sur le champs field2 et field3 après recherche sur field1
_daoSp()->addCondition('field1','=','foo')->groupBy ('field2', 'field3');
 

orderBy

La méthode orderBy vous permet de spécifier des ordres de tri pour les résultats.

La méthode orderBy accepte autant de paramètres que de champs utilisés dans le tri.

Spécification d'un tri ascendant


//exemple 1
_daoSp ()->orderBy ('champ1');

//exemple 2
_daoSp ()->orderBy ('champ1')
      ->orderBy ('champ2');
//équivalent à
_daoSp ()->orderBy ('champ1', 'champ2');
//équivalent à
_daoSp ()->orderBy (array ('champ1', 'ASC'), array ('champ2', 'ASC'));
 

spécification d'un tri descendant


//exemple 1
_daoSp ()->orderBy (array ('champ1', 'DESC'));

//exemple 2
_daoSp ()->orderBy (array ('champ1', 'DESC'))
      ->orderBy (array ('champ2', 'DESC'));
//équivalent à
_daoSp ()->orderBy (array ('champ1', 'DESC'),
                 array ('champ2', 'DESC'));
 

setLimit, setCount, setOffset

Ces méthodes permettent de définir des limites sur les enregistrements à récupérer.


//Demande à récupérer 4 enregistrements à partir de l'enregistrement numéro 3
_daoSp ()->setLimit (2, 4);
//ou
_daoSp ()->setOffset (2)
         ->setCount (4);

//Demande à récupérer 5 enregistrements
_daoSp ()->setCount (5);

//Demande à récupérer à partir de l'enregistrement 6 (inclus)
_daoSp ()->setOffset (5);

 

startGroup & endGroup

startGroup et endGroup permettent de définir des groupes de conditions. Vous pouvez imbriquer autant de groupes que vous le souhaitez.

startGroup accepte un paramètre qui est le type de groupe (conditions requises (AND) ou facultatives (OR)) au même titre que le 4ème paramètre de addCondition.

Par défaut, le paramètre est positionné à "AND"

Exemple


//sélection de tous les éléments sticky ou de tous les éléments non sticky datant de 2006 ou plus
_daoSp ()->addCondition('sticky', '=', '1')
      ->startGroup ('OR')
      ->addCondition('sticky', '=', '0')
      ->addCondition('date', '>', '2006-01-01')
      ->endGroup ();