gestions conditions
This commit is contained in:
parent
bc059ee4c9
commit
88a94b044e
48
php/src/db/conds.php
Normal file
48
php/src/db/conds.php
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
<?php
|
||||||
|
namespace nulib\db;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class conds: classe outil pour gérer les conditions
|
||||||
|
*/
|
||||||
|
class conds {
|
||||||
|
/**
|
||||||
|
* retourner une condition "equals" ou "like" en fonction de l'argument:
|
||||||
|
* - si $value contient "%" ou "*", retourner ["like", $value]
|
||||||
|
* - sinon retourner ["=", $value]
|
||||||
|
*/
|
||||||
|
static function eq_or_like($value) {
|
||||||
|
if ($value === false || $value === null) return $value;
|
||||||
|
if (preg_match('/[*%]/', $value)) {
|
||||||
|
$value = str_replace('*', '%', $value);
|
||||||
|
return ["like", $value];
|
||||||
|
} else {
|
||||||
|
return ["=", $value];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# nb de caractères minimum pour une recherche approximative
|
||||||
|
const LIKE_THRESHOLD = 2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* retourner une condition "like" si la valeur s'y prête
|
||||||
|
*
|
||||||
|
* - si la valeur fait moins de $likeThreshold caractères, faire une recherche
|
||||||
|
* exacte en retournant ["=", $value]
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* - les espaces sont remplacés par %
|
||||||
|
*
|
||||||
|
* si $partial
|
||||||
|
*/
|
||||||
|
static function like($value, bool $partial=false, ?int $likeThreshold=null) {
|
||||||
|
if ($value === false || $value === null) return $value;
|
||||||
|
if ($likeThreshold === null) $likeThreshold = static::LIKE_THRESHOLD;
|
||||||
|
if (strlen($value) < $likeThreshold) return ["=", $value];
|
||||||
|
if ($partial) {
|
||||||
|
// Rajouter un espace qui sera remplacé par % s'il n'y en a pas déjà
|
||||||
|
if (!preg_match('/[- %]$/', $value)) $value .= " ";
|
||||||
|
}
|
||||||
|
$value = preg_replace('/[- ]+/', '%', $value);
|
||||||
|
return ["like", $value];
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user