Skip to content

Commit 65a5d2f

Browse files
author
Carlos Garcia
committed
El método belongsTo() de los modelos ahora usa caché con memoria para reducir al mínimo las consultas.
1 parent b78a5e7 commit 65a5d2f

File tree

2 files changed

+14
-7
lines changed

2 files changed

+14
-7
lines changed

Core/Internal/CacheWithMemory.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public function delete(string $key): void
4545
Cache::delete($key);
4646
}
4747

48-
public function deleteMulti(string $prefix): void
48+
public static function deleteMulti(string $prefix): void
4949
{
5050
// Eliminamos de memoria todos los que empiecen con el prefijo
5151
foreach (self::$memoryStorage as $key => $item) {

Core/Template/ModelClass.php

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
use FacturaScripts\Core\Cache;
2525
use FacturaScripts\Core\DbQuery;
2626
use FacturaScripts\Core\DbUpdater;
27+
use FacturaScripts\Core\Internal\CacheWithMemory;
2728
use FacturaScripts\Core\Lib\Import\CSVImport;
2829
use FacturaScripts\Core\Tools;
2930
use FacturaScripts\Core\Where;
@@ -184,9 +185,9 @@ public function clear(): void
184185

185186
public function clearCache(): void
186187
{
187-
Cache::deleteMulti('model-' . $this->modelClassName() . '-');
188-
Cache::deleteMulti('join-model-');
189-
Cache::deleteMulti('table-' . static::tableName() . '-');
188+
CacheWithMemory::deleteMulti('model-' . $this->modelClassName() . '-');
189+
CacheWithMemory::deleteMulti('join-model-');
190+
CacheWithMemory::deleteMulti('table-' . static::tableName() . '-');
190191
}
191192

192193
public function delete(): bool
@@ -645,9 +646,15 @@ protected function belongsTo(string $modelName, string $foreignKey): ?object
645646
$modelName = end($parts);
646647
}
647648

648-
$modelClass = '\\FacturaScripts\\Dinamic\\Model\\' . $modelName;
649-
$model = new $modelClass();
650-
return $model->load($this->{$foreignKey}) ? $model : null;
649+
// Cache key for this relationship
650+
$key = $this->{$foreignKey};
651+
$cacheKey = 'model-' . $modelName . '-' . $key;
652+
653+
return Cache::withMemory()->remember($cacheKey, function () use ($modelName, $key) {
654+
$modelClass = '\\FacturaScripts\\Dinamic\\Model\\' . $modelName;
655+
$model = new $modelClass();
656+
return $model->load($key) ? $model : null;
657+
});
651658
}
652659

653660
protected static function db(): DataBase

0 commit comments

Comments
 (0)