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