SydonieQuery
Les objets SydonieQuery* permettent de réaliser des interrogations sur divers objets gérés par Sydonie. Divers critère speuvent être mis en oeuvre comme l'inbdique les exemples ci-dessous.
L'objectif des SydonieQuery est de sélectionner certaines entités en appliquant un certain nombre de restrictions, sur les attributs, les statements ou autres.
Utiliser les SydonieQuery nécessite très peu de connaissance en SQL. Par contre, développer de nouveaux filtres pour les SydonieQuery demande de bien avoir assimilé les subtilités du modèle de base de données de Sydonie.
Avant de construire sa requête, il convient de bien cerner les caractéristiques des entités que l'on souhaite lister.
Si l'on souhaite récupérer l'ensemble des articles que l'utilisateur courant sur lesquels l'utilisateur courant à le droit 'read', on utilisera la requête suivante :
$query = new SydonieQuery_Query(array( new SydonieQuery_Entity('instance', 'SydonieDocument_Article'), new SydonieQuery_Rights('instance', 'read'), new SydonieQuery_Return('instance'), )); $nbArticles = $query->count(); $lstArticles = $query->fetchAll();
Notons bien qu'à la fin de cet exemple, $lstArticles est une liste d'instance de "SydonieDocument_Article". Explications complémentaires :
- new SydonieQuery_Entity('instance', 'SydonieDocument_Article') déclare que la "variable" recherché sera des instances de SydonieDocument_Article
- "instance" est alors utilisé par la suite pour donner d'autres critères à utiliser
Autre exemple : ordonner les réponses (adapter en fonction du type d'objet et des champs dont il dispose)
$query = new SydonieQuery_Query(array( new SydonieQuery_Entity('disaster', 'SydonieDocument_Disaster'), new SydonieQuery_Rights('disaster', 'read'), new SydonieQuery_OrderBy(array('disaster.startDate.date' => 'DESC')), new SydonieQuery_Limit(0, 10), new SydonieQuery_Return('disaster') ));
Un autre exemple : pour lister les articles que l'utilisateur courant peut modifier et dont le titre contient 'Toto'.
$query = new SydonieQuery_Query(array( new SydonieQuery_Entity('instance', 'SydonieDocument_Article'), new SydonieQuery_Expression('?{instance.title.text} LIKE \'%Toto\'%'), new SydonieQuery_Rights('instance', 'write'), new SydonieQuery_Return('instance'), )); $nbArticles = $query->count(); $lstArticles = $query->fetchAll();
Dans cet exemple, nous utilisons la clause "SydonieQuery_Expression" qui va ajouter une restriction (au sens SQL) sur les entités retournées par la requête "?{instance.title.text}" est un raccourci pour désigner la colonne de la table qui contient effectivement la chaine de caractère du titre du livre.
Au sein d'une "SydonieQuery_Expression", il est possible d'utiliser n'importe quel fragment de syntaxe SQL.
On peut ajouter des clauses à volonté, les clauses seront "combinées" avec des ET (AND en SQL) pour effectuer la requête.