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 { function chargeAll(?iterable $items, $func=null, ?array $args=null): int {
$count = 0; $count = 0;
if ($items !== null) { if ($items !== null) {
if ($func !== null) {
$func = func::with($func, $args)->bind($this->channel);
}
foreach ($items as $item) { foreach ($items as $item) {
$count += $this->charge($item, $func, $args); $count += $this->charge($item, $func);
} }
} }
return $count; return $count;

View File

@ -444,7 +444,7 @@ class CapacitorChannel implements ITransactor {
return $this->capacitor->charge($item, $func, $args, $row); 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); return $this->capacitor->chargeAll($items, $func, $args);
} }
@ -452,23 +452,49 @@ class CapacitorChannel implements ITransactor {
return $this->capacitor->discharge($reset); 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 { function count($filter=null): int {
$this->verifixFilter($filter);
return $this->capacitor->count($filter); return $this->capacitor->count($filter);
} }
function one($filter, ?array $mergeQuery=null): ?array { function one($filter, ?array $mergeQuery=null): ?array {
$this->verifixFilter($filter);
return $this->capacitor->one($filter, $mergeQuery); return $this->capacitor->one($filter, $mergeQuery);
} }
function all($filter, ?array $mergeQuery=null): Traversable { function all($filter, ?array $mergeQuery=null): Traversable {
$this->verifixFilter($filter);
return $this->capacitor->all($filter, $mergeQuery); return $this->capacitor->all($filter, $mergeQuery);
} }
function each($filter, $func=null, ?array $args=null, ?array $mergeQuery=null, ?int &$nbUpdated=null): int { 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); return $this->capacitor->each($filter, $func, $args, $mergeQuery, $nbUpdated);
} }
function delete($filter, $func=null, ?array $args=null): int { function delete($filter, $func=null, ?array $args=null): int {
$this->verifixFilter($filter);
return $this->capacitor->delete($filter, $func, $args); return $this->capacitor->delete($filter, $func, $args);
} }

View File

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