filtre de base

This commit is contained in:
Jephté Clain 2025-06-24 02:18:18 +04:00
parent f34694e12d
commit 2c7020f44d
3 changed files with 32 additions and 3 deletions

View File

@ -146,8 +146,11 @@ class Capacitor implements ITransactor {
function chargeAll(?iterable $items, $func=null, ?array $args=null): int {
$count = 0;
if ($items !== null) {
if ($func !== null) {
$func = func::with($func, $args)->bind($this->channel);
}
foreach ($items as $item) {
$count += $this->charge($item, $func, $args);
$count += $this->charge($item, $func);
}
}
return $count;

View File

@ -444,7 +444,7 @@ class CapacitorChannel implements ITransactor {
return $this->capacitor->charge($item, $func, $args, $row);
}
function chargeAll(iterable $items, $func=null, ?array $args=null): int {
function chargeAll(?iterable $items, $func=null, ?array $args=null): int {
return $this->capacitor->chargeAll($items, $func, $args);
}
@ -452,23 +452,49 @@ class CapacitorChannel implements ITransactor {
return $this->capacitor->discharge($reset);
}
/**
* retourner le filtre de base: les filtres de toutes les fonctions ci-dessous
* sont fusionnées avec le filtre de base
*
* cela permet de limiter toutes les opérations à un sous-ensemble des données
* du canal
*/
function getBaseFilter(): ?array {
return null;
}
protected function verifixFilter(&$filter): void {
if ($filter !== null && !is_array($filter)) {
$primaryKeys = $this->primaryKeys ?? ["id_"];
$id = $filter;
$this->verifixId($id);
$filter = [$primaryKeys[0] => $id];
}
$filter = cl::merge($this->getBaseFilter(), $filter);
}
function count($filter=null): int {
$this->verifixFilter($filter);
return $this->capacitor->count($filter);
}
function one($filter, ?array $mergeQuery=null): ?array {
$this->verifixFilter($filter);
return $this->capacitor->one($filter, $mergeQuery);
}
function all($filter, ?array $mergeQuery=null): Traversable {
$this->verifixFilter($filter);
return $this->capacitor->all($filter, $mergeQuery);
}
function each($filter, $func=null, ?array $args=null, ?array $mergeQuery=null, ?int &$nbUpdated=null): int {
$this->verifixFilter($filter);
return $this->capacitor->each($filter, $func, $args, $mergeQuery, $nbUpdated);
}
function delete($filter, $func=null, ?array $args=null): int {
$this->verifixFilter($filter);
return $this->capacitor->delete($filter, $func, $args);
}

View File

@ -434,7 +434,7 @@ abstract class CapacitorStorage {
}
if ($func !== null) {
$updates = func::with($func)
$updates = func::with($func, $args)
->prependArgs([$item, $row, $prow])
->bind($channel)
->invoke();