# Les opérateurs de filtres SearchElements
La classe ElementSearchFilter est une interface permettant d'efféctuer des requêtes de filtres SQL facilement à l'aide de classe implémentant celle-ci.
# Classe Contains
La classe Contains
permet de réaliser facilement un filtre de type contains
sur un Smart Field.
# Constructeur
<?php
new Contains($attrId, $value);
# Exemple
- Recherche des utilisateurs dont le prénom contient
Jean
:
<?php
use Anakeen\Search\Filters\Contains;
use Anakeen\Search\SearchElements;
use SmartStructure\Fields\Iuser as iuser;
$s = new SearchElements("IUSER");
$s->addFilter(new Contains(iuser::us_fname, "Jean"));
$res = $s->search()->getResults();
foreach ($res as $r) {
print $r->getRawValue("us_fname") . " \n";
}
- Résultat :
Jean-Marie
Jean
Jean
Jean-Baptiste
Jean-Christophe
Jean
Jeanne-Maureen
Jean-Pierre
Jean-Pierre
Jeanne
Jean-Baptiste
# Classe ContainsValues
La classe ContainsValues
permet de réaliser facilement un filtre vérifiant si les valeurs sont incluses dans
l'ensemble de valeurs de certains type de Smart Fields.
La classe ContainsValues
est compatibles avec les Smart Fields de type suivants :
- text,
- htmltext,
- longtext,
- int,
- double,
- money,
- date,
- timestamp,
- time,
- enum,
- docid,
- account.
# Constructeur
<?php
new ContainsValues($attrId, $values);
# Exemple
- Recherche de toutes les factures dont le client (
DEVCLIENT
) possède l'identifiant97729
;
<?php
use Anakeen\Search\Filters\ContainsValues;
use Anakeen\Search\SearchElements;
use SmartStructure\Fields\Devbill as devbill;
$s = new SearchElements("DEVBILL");
$s->addFilter(new ContainsValues(devbill::bill_clients, "97729"));
$res = $s->search()->getResults();
foreach ($res as $r) {
print $r->getRawValue("bill_title") . " \n";
}
- Résultat :
Bill0001
Bill0063
Bill0088
Bill0218
Bill0229
Bill0242
Bill0268
# Classe DocumentTitle
La classe DocumentTile
permet de réaliser facilement un filtre dont le titre d'un Smart Element est égal à la valeur
indiquée.
# Constructeur
<?php
new DocumentTitle($attrId, $value);
# Exemple
- Recherche le titre des factures dont l'auteur est
Jean
<?php
use Anakeen\Search\Filters\DocumentTitle;
use Anakeen\Search\SearchElements;
use SmartStructure\Fields\Devbill as devbill;
$s = new SearchElements("DEVBILL");
$s->addFilter(new DocumentTitle(devbill::bill_author, "Jean"));
$res = $s->search()->getResults();
foreach ($res as $r) {
print $r->getRawValue(devbill::bill_title) . " \n";
}
- Résultat :
Bill0090
Bill0091
Bill0092
# Classe Filename | FilenameContains | FilenameEquals
La classe Filename
permet de réaliser facilement un filtre sur le titre d'un fichier. La classe Filename
est
compatible avec les Smart Fields de type suivants :
file
,image
.
Note
La classe Filename
est ascendante de deux autres classes (FilenameContains
et FilenameEquals
) reprenant exactement
les mêmes fonctionnalités à l'exception du type de résultat attendu :
FilenameContains
: le nom du fichier contient la valeur en argument,FilenameEquals
: le nom du fichier est égal à la valeur en argument.
# Constructeur
<?php
new Filename($attrId, $value);
# Exemple
- Recherche d'un fichier dont le nom contient le mot
RAPPORT
:
<?php
use Anakeen\Search\Filters\Filename;
use Anakeen\Search\SearchElements;
use SmartStructure\Fields\File as file;
$s = new SearchElements("FILE");
$s->addFilter(new Filename(file::fi_file, "RAPPORT"));
$res = $s->search()->getResults();
foreach ($res as $r) {
print $r->getRawValue("fi_title") . " \n";
}
Dans le cadre de cette requête, l'utilisation de la classe FilenameContains
renverra le même résultat que Filename
,
tandis que l'utilisation de la classe FilenameEquals
ne renverra rien.
En effet, RAPPORT
n'est qu'une chaîne de caractères appartenant au nom du fichier.
# Classe HasApplicationTag
La classe HasApplicationTag
permet de réaliser facilement un filtre sur tous les Smart Elements possédant un tag
applicatif.
# Constructeur
<?php
new HasApplicationTag($value);
# Exemple
- Ajout d'un tag applicatif sur le Smart Element
98128
:
<?php
use Anakeen\Core\SEManager;
$doc = SEManager::getDocument("98128");
$doc->addATag("Test");
- Recherche de factures et leur auteur ayant comme tag applicatif
Test
:
<?php
use Anakeen\Search\Filters\HasApplicationTag;
use Anakeen\Search\SearchElements;
use Anakeen\Core\SEManager;
$s = new SearchElements();
$s->addFilter(new HasApplicationTag("Test"));
$res = $s->search()->getResults();
foreach ($res as $r) {
print $r->getTitle() . " \n";
}
- Résultat :
Bill0020 BARBIER Lou
# HasUserTag
La classe HasUserTag
permet de réaliser facilement un filtre sur les Smart Element possédant un tag utilisateur.
# Constructeur
<?php
new HasUserTag($uid, $value);
# Exemple
- Recherche de facture possédant un tag utilisateur
Test
:
<?php
use Anakeen\Core\Account;
use Anakeen\Core\SEManager;
use Anakeen\Search\Filters\HasUserTag;
use Anakeen\Search\SearchElements;
$user = SEManager::getDocument(98521);
$uid = Account::getUidFromFid($user->id);
$s = new SearchElements();
$s->addFilter(new HasUserTag($uid, "Test"));
$res = $s->search()->getResults();
foreach ($res as $r) {
print $r->getTitle() . " \n";
}
- Résultat :
Bill0020 BARBIER Lou
# IdentifiersIn
La classe IdentifiersIn
permet de réaliser facilement un filtre déterminant si l'identifiant d'un Smart Element est
inclus dans un ensemble.
La classe IdentifiersIn
n'accepte que des valeurs de type int
.
# Constructeur
<?php
new IdentifiersIn($value);
# Exemple
- Recherche de personne associées à la Smart Structure
DEVPERSON
dans une liste d'identifiants :
<?php
use Anakeen\Router\ApiV2Response;
use Anakeen\Search\Filters\IdentifiersIn;
use Anakeen\Search\SearchElements;
$s = new SearchElements("DEVPERSON");
$s->addFilter(new IdentifiersIn(array(93982, 93999, 98520, 97593, 98427, 1011, 95394)));
$res = $s->search()->getResults();
foreach ($res as $r) {
print $r->getTitle() . " \n";
}
- Résultat :
BOULICAUT Lisa
# IsEmpty
La classe IsEmpty
permet de réaliser facilement un filtre qui teste si la valeur du Smart Field est null ou non.
<?php
new IsEmpty($attrid);
# Exemple
- Recherche de factures et leur auteur où il n'y a pas de date de facturation.
<?php
use Anakeen\Search\Filters\IsEmpty;
use Anakeen\Search\SearchElements;
use SmartStructure\Fields\Devbill as devbill;
$s = new SearchElements("DEVBILL");
$s->addFilter(new IsEmpty(devbill::bill_billdate));
$res = $s->search()->getResults();
foreach ($res as $r) {
print $r->getTitle() . " \n";
}
- Résultat :
Bill0001 ACKERER Kathleen
Bill0002 ACKERER Kathleen
Bill0003 ADAMZIK Jack
Bill0004 ADAMZIK Jack
Bill0005 ADAMZIK Jack
Bill0006 ALEZRA Joyce
Bill0007 ALEZRA Joyce
Bill0008 AMSELEM Noé
[...]
# IsEqual
La classe IsEqual
permet de réaliser facilement un filtre qui teste si la valeur d'un Smart Field est égale à la
valeur en argument.
# Constructeur
<?php
new IsEqual($attrId, $value);
# Exemple
- Recherche de facture dont l'auteur est
DUPUIS Rose
:
<?php
use Anakeen\Search\Filters\IsEqual;
use Anakeen\Search\SearchElements;
use SmartStructure\Fields\Devbill as devbill;
$s = new SearchElements("DEVBILL");
$s->addFilter(new IsEqual(devbill::bill_author_display, "DUPUIS Rose"));
$res = $s->search()->getResults();
foreach ($res as $r) {
print $r->getTitle() . " \n";
}
- Résultat :
Bill0094 DUPUIS Rose
Bill0095 DUPUIS Rose
Bill0096 DUPUIS Rose
# isGreater
La classe IsGreater
permet de réaliser facilement un filtre qui teste si la valeur d'un Smart Field est supérieure (ou
égal si la variable $EQUAL
vaut true
) à la valeur en argument.
La classe IsGreater
est compatible avec les Smart Fields de type suivants :
- int,
- double,
- money,
- date,
- timestamp,
- time.
# Constructeur
<?php
new IsGreater($attrId, $value);
# Exemple
- Recherche de factures et leur auteur dont la date de facturation est supérieure au
01/09/2019
:
<?php
use Anakeen\Search\Filters\IsGreater;
use Anakeen\Search\SearchElements;
use SmartStructure\Fields\Devbill as devbill;
$s = new SearchElements("DEVBILL");
$s->addFilter(new IsGreater(devbill::bill_billdate, "01/09/2019"));
$res = $s->search()->getResults();
foreach ($res as $r) {
print $r->getTitle() . $r->getRawValue(devbill::bill_billdate) . " \n";
}
- Résultat :
Bill0081 DECRESSAIN Robin 2019-09-05
Bill0102 FAYE Noémie 2019-09-02
# IsLesser
La classe IsLesser
permet de réaliser facilement un filtre qui teste si la valeur d'un Smart Field est inférieure (ou
égal si la variable $EQUAL
vaut true
) à la valeur en argument.
La classe IsLesser
est compatible avec les Smart Fields de type suivantes :
- int,
- double,
- money,
- date,
- timestamp,
- time.
# Constructeur
<?php
new IsLesser($attrId, $value);
# Exemple
- Recherche de factures et leur auteur dont la date de facturation est inférieure au
01/09/2019
:
<?php
use Anakeen\Search\Filters\IsLesser;
use Anakeen\Search\SearchElements;
use SmartStructure\Fields\Devbill as devbill;
$s = new SearchElements("DEVBILL");
$s->addFilter(new IsLesser(devbill::bill_billdate, "01/09/2019"));
$res = $s->search()->getResults();
foreach ($res as $r) {
print $r->getTitle() . $r->getRawValue(devbill::bill_billdate) . " \n";
}
- Résultat :
Bill0086 DIVE Manon 2019-08-15
Bill0280 VERNICK Léna 2019-06-13
# IsNotEmpty
La classe IsNotEmpty
permet de réaliser facilement un filtre qui teste si la valeur du Smart Field n'est pas null.
# Constructeur
<?php
new IsNotEmpty($attrId);
# Exemple
- Recherche de factures et leur auteur où une date de facturation a été émise.
<?php
use Anakeen\Search\Filters\IsNotEmpty;
use Anakeen\Search\SearchElements;
use SmartStructure\Fields\Devbill as devbill;
$s = new SearchElements("DEVBILL");
$s->addFilter(new IsNotEmpty(devbill::bill_billdate));
$res = $s->search()->getResults();
foreach ($res as $r) {
print $r->getTitle() . " \n";
}
- Résultat :
Bill0081 DECRESSAIN Robin 2019-09-05
Bill0086 DIVE Manon 2019-08-15
Bill0102 FAYE Noémie 2019-09-02
Bill0280 VERNICK Léna 2019-06-13
# IsNotEqual
La classe IsNotEqual
permet de réaliser facilement un filtre qui teste si la valeur d'un Smart Field est différente de
la valeur en argument.
# Constructeur
<?php
new IsNotEqual($attrId, $value);
# Exemple
- Recherche de factures et leurs auteur qui n'est pas
DUPUIS Rose
:
<?php
use Anakeen\Search\Filters\IsNotEqual;
use Anakeen\Search\SearchElements;
use SmartStructure\Fields\Devbill as devbill;
$s = new SearchElements("DEVBILL");
$s->addFilter(new IsNotEqual(devbill::bill_author_display, "DUPUIS Rose"));
$res = $s->search()->getResults();
foreach ($res as $r) {
print $r->getTitle() . " \n";
}
- Résultat :
Bill0001 ACKERER Kathleen
Bill0002 ACKERER Kathleen
Bill0003 ADAMZIK Jack
Bill0004 ADAMZIK Jack
Bill0005 ADAMZIK Jack
Bill0006 ALEZRA Joyce
Bill0007 ALEZRA Joyce
Bill0008 AMSELEM Noé
[...]
# NameEquals
La classe NameEquals
permet de réaliser facilement un filtre permettant de tester si le nom d'un Smart Element est
égal à la valeur en argument. La classe NameEquals
est compatible avec les Smart Fields de type text
seulement.
# Constructeur
<?php
new NameEquals($value);
# Exemple
- Recherche du titre de Smart Elements dont le nom est
TST_RENDER_0100
<?php
use Anakeen\Search\Filters\NameEquals;
use Anakeen\Search\SearchElements;
$s = new SearchElements("TST_RENDER");
$s->addFilter(new NameEquals("TST_RENDER_0100"));
$res = $s->search()->getResults();
foreach ($res as $r) {
print $r->getTitle() . " \n";
}
- Résultat :
0100Document: : setTabPlacement(left)
# OneContains
La classe OneContains
permet de réaliser facilement un filtre permettant de tester si une des valeurs d'un Smart Field
multivalué contient la valeur en argument.
La classe OneContains
est compatibles avec les Smart Fields de type suivant :
- text,
- htmltext,
- longtext.
# Constructeur
<?php
new OneContains($attrId, $value);
# Exemple
- Recherche de factures et leur auteur dont le nom d'un client contient
Jean
:
<?php
use Anakeen\Search\Filters\OneContains;
use Anakeen\Search\SearchElements;
use SmartStructure\Fields\Devbill as devbill;
$s = new SearchElements("DEVBILL");
$s->addFilter(new OneContains(devbill::bill_clientname, "Jean"));
$res = $s->search()->getResults();
foreach ($res as $r) {
print $r->getTitle() . $r->getRawValue(devbill::bill_author) . " \n";
}
- Résultat :
Bill0027 BENISTON Jules
Bill0063 CASSIER Louis
Bill0072 CHARMANTIER Margaux
Bill0145 KLINKERT Léonie
Bill0249 STONE Emma
Bill0265 THUILLIER Eric
# OneGreaterThan
La classe OneGreaterThan
permet de réaliser facilement un filtre permettant de tester si une des valeurs d'un Smart
Field multivalué est supérieure (ou égale si la variable $EQUAL
vaut true
) à la valeur en argument.
La classe OneGreaterThan
est compatible avec les Smart Fields de type suivant :
- int,
- double,
- money,
- date,
- timestamp,
- time.
# Constructeur
<?php
new OneGreaterThan($attrId, $value);
# Exemple
- Recherche des titres de Smart Elements pour lequel une valeur de
test_ddui_all__double_array
est supérieure à 3.0 :
<?php
use Anakeen\Search\Filters\OneGreaterThan;
use Anakeen\Search\SearchElements;
$s = new SearchElements("TST_DDUI_ALLTYPE");
$s->addFilter(new OneGreaterThan("test_ddui_all__double_array", 3.0));
$res = $s->search()->getResults();
foreach ($res as $r) {
print $r->getTitle() . " \n";
}
- Résultat :
test_SetLink
Tout complet
# OneLesserThan
La classe OneLesserThan
permet de réaliser facilement un filtre permettant de tester si une des valeurs d'un Smart
Field multivalué est inférieure (ou égale si la variable $EQUAL
vaut true
) à la valeur en argument.
La classe OneLesserThan
est compatible avec les Smart Fields de type suivant :
- int,
- double,
- money,
- date,
- timestamp,
- time.
# Constructeur
<?php
new OneLesserThan($attrId, $value);
# Exemple
- Recherche des titres de Smart Elements pour lequel une valeur de
test_ddui_all__double_array
est inférieure à 30.0 :
<?php
use Anakeen\Search\Filters\OneLesserThan;
use Anakeen\Search\SearchElements;
$s = new SearchElements("TST_DDUI_ALLTYPE");
$s->addFilter(new OneLesserThan("test_ddui_all__double_array", 30.0));
$res = $s->search()->getResults();
foreach ($res as $r) {
print $r->getTitle() . " \n";
}
- Résultat :
test_SetLink
Tout complet
# StartsWith
La classe StartsWith
permet de réaliser facilement un filtre qui teste si une chaîne de caractère commence par la
chaîne de caractère en argument.
La classe StartsWith
hérite de la classe Contains
et est donc compatible avec les types de Smart Fields suivants :
- text,
- htmltext,
- longtext.
# Constructeur
<?php
new StartsWith($attrId, $value);
# Exemple
- Recherche de factures et leur auteur dont le contenu commence par
Content
:
<?php
use Anakeen\Search\Filters\StartsWith;
use Anakeen\Search\SearchElements;
use SmartStructure\Fields\Devbill as devbill;
$s = new SearchElements("DEVBILL");
$s->addFilter(new StartsWith(devbill::bill_content, "Content"));
$res = $s->search()->getResults();
foreach ($res as $r) {
print $r->getTitle() . $r->getRawValue(devbill::bill_content) . " \n";
}
- Résultat :
Bill0001 ACKERER Kathleen Content for the bill number 0001 Writed by "ACKERER Kathleen".
Bill0002 ACKERER Kathleen Content for the bill number 0001 Writed by "ACKERER Kathleen".
[...]
# TitleContains
La classe TitleContains
permet de réaliser facilement un filtre contains
sur le titre d'un Smart Element.
La classe TitleContains
est compatible avec les Smart Fields de type text
.
# Constructeur
<?php
new TitleContains($value);
# Exemple
- Recherche des Smart Elements dont le titre contient
Manon
:
<?php
use Anakeen\Search\Filters\TitleContains;
use Anakeen\Search\SearchElements;
$s = new SearchElements("DEVBILL");
$s->addFilter(new TitleContains("Manon"));
$res = $s->search()->getResults();
foreach ($res as $r) {
print $r->getTitle() . " \n";
}
- Résultat :
Bill0086 DIVE Manon
Bill0169 MAROLLEAU Manon
Bill0170 MAROLLEAU Manon
Bill0171 MAROLLEAU Manon
# OneDocumentTitle
La classe OneDocumentTitle
permet de réaliser facilement un filtre permettant de tester si un des titres de Smart
Element d'un Smart Field multivalué contient la valeur en argument.
# Constructeur
<?php
new OneDocumentTitle($attrId, $value);
# Exemple
- Recherche de Smart Element lié aux comptes contenant
Granget
<?php
use Anakeen\Search\Filters\OneDocumentTitle;
use Anakeen\Search\SearchElements;
$s = new SearchElements("TST_DDUI_ALLTYPE");
$s->addFilter(new OneDocumentTitle("test_ddui_all__account_multiple", "Granget"));
$res = $s->search()->getResults();
foreach ($res as $r) {
print $r->getTitle() . $r->getRawValue("test_ddui_all__account_multiple") . " \n";
}
- Résultat :
test_SetLink
{
98429,
98428
}
Toutcomplet
{
98429,
98428
}
# OrOperator
La classe OrOperator
permet d'utiliser l'opérateur logique "OR" sur plusieurs filtres.
# Constructeur
<?php
new OrOperator(ElementSearchFilter ...$filters);
Jointure
Les filtres qui utilisent des jointures ne peuvent pas toujours être utilisés avec cet opérateur. L'opérateur ne peut gérer qu'une seule jointure. Il faut que toutes les conditions du filtre utilisent la même jointure. Dans le cas contraire, une exception sera levée.
# Exemple
- Recherche des factures dont le titre contient
Adam
ou le prix (bill_cost
) est supérieur à 1700€.
<?php
use Anakeen\Search\SearchElements;
use SmartStructure\Fields\Devbill as DevbillFields;
$s = new SearchElements("DEVBILL");
$s->addFilter(
new \Anakeen\Search\Filters\OrOperator(
new \Anakeen\Search\Filters\TitleContains("Adam"),
new \Anakeen\Search\Filters\IsGreater(DevbillFields::bill_cost, 1700)
)
);
$results = $s->search()->getResults();
printf("| %-25s | %-10s |\n", "Title", DevbillFields::bill_cost);
print str_pad(" ", 40, "-") . "\n";
foreach ($results as $result) {
printf("| %-25s | %10d |\n", $result->getTitle(), $result->getRawValue(DevbillFields::bill_cost));
}
- Résultat :
4 éléments dont le coût est > 1700 et 3 éléments contenant "Adam" (un des éléments remplit les 2 conditions).
| Title | bill_cost |
---------------------------------------
| Bill 0001 NOIROT Eliott | 1828 |
| Bill 0003 NOIROT Eliott | 1831 |
| Bill 0004 ROMAGNY Anna | 1937 |
| Bill 0006 THOUROUDE Adam | 1531 |
| Bill 0007 THOUROUDE Adam | 1845 |
| Bill 0008 THOUROUDE Adam | 972 |
# AndOperator À partir de la version 2021.01
La classe AndOperator
permet d'utiliser l'opérateur logique "AND" sur plusieurs filtres.
# Constructeur
<?php
new AndOperator(ElementSearchFilter ...$filters);
Jointure
Les filtres qui utilisent des jointures ne peuvent pas toujours être utilisés avec cet opérateur. L'opérateur ne peut gérer qu'une seule jointure. Il faut que toutes les conditions du filtre utilisent la même jointure. Dans le cas contraire, une exception est levée.
# Exemple
- Recherche des factures dont le titre contient
Victor
et le prix (bill_cost
) est inférieur à 1500€.
<?php
use Anakeen\Search\SearchElements;
use SmartStructure\Fields\Devbill as DevbillFields;
$s = new SearchElements("DEVBILL");
$s->addFilter(
new \Anakeen\Search\Filters\AndOperator(
new \Anakeen\Search\Filters\TitleContains("Victor"),
new \Anakeen\Search\Filters\IsLesser(DevbillFields::bill_cost, 1500)
)
);
$results = $s->search()->getResults();
printf("| %-25s | %-10s |\n", "Title", DevbillFields::bill_cost);
print str_pad(" ", 40, "-") . "\n";
foreach ($results as $result) {
printf("| %-25s | %10d |\n", $result->getTitle(), $result->getRawValue(DevbillFields::bill_cost));
}
- Résultat :
3 éléments remplissent les 2 conditions (titre contient "Victor" et bill_cost < 1400).
| Title | bill_cost |
---------------------------------------
| Bill 0077 CHARVET Victor | 558 |
| Bill 0131 GIRAUT Victor | 727 |
| Bill 0165 LEBRETON Victor | 1428 |
# NotOperator
La classe NotOperator
permet d'utiliser l'opérateur logique "NOT" sur plusieurs filtres.
# Constructeur
<?php
new NotOperator(ElementSearchFilter ...$filters);
# Exemple
- Recherche des factures dont le prix (
bill_cost
) n'est pas inférieur à 1900€.
<?php
use Anakeen\Search\SearchElements;
use SmartStructure\Fields\Devbill as DevbillFields;
$s = new SearchElements("DEVBILL");
$s->addFilter(
new \Anakeen\Search\Filters\NotOperator(new \Anakeen\Search\Filters\IsLesser(DevbillFields::bill_cost, 1900))
);
$results = $s->search()->getResults();
printf("| %-25s | %-10s |\n", "Title", DevbillFields::bill_cost);
print str_pad(" ", 40, "-") . "\n";
foreach ($results as $result) {
printf("| %-25s | %10d |\n", $result->getTitle(), $result->getRawValue(DevbillFields::bill_cost));
}
- Résultat :
14 éléments n'ont pas un cout inférieur à 1900€.
| Title | bill_cost |t=test1
---------------------------------------
| Bill 0003 AIMAR Elizabeth | 1982 |
| Bill 0034 BLANC Edward | 1985 |
| Bill 0066 CHANZY Martha | 1940 |
| Bill 0076 CHARVET Victor | 1948 |
| Bill 0093 DAUVIN Paul | 1959 |
| Bill 0095 DESBIEZ Simon | 1954 |
| Bill 0100 DOJAT Carolyn | 1934 |
| Bill 0122 GARROUSTE Charlie | 1919 |
| Bill 0154 JOLY Alice | 1915 |
| Bill 0164 LANNOU Margaux | 1940 |
| Bill 0193 OGEE Philip | 1992 |
| Bill 0195 OGIEN Jeremy | 1941 |
| Bill 0208 RASSE Evelyn | 1952 |
| Bill 0216 RENNE Martin | 1931 |