Obvody/app/Model/ZvestovatelFacade.php

74 lines
1.6 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Model;
use Nette\Database\Explorer;
use Nette\Database\Row;
/**
* Jména zvěstovatelů odvozená ze záznamů.
*/
final class ZvestovatelFacade
{
public function __construct(
private Explorer $database,
) {
}
/**
* @return list<Row>
*/
public function getVsechny(): array
{
return $this->database->fetchAll(
'SELECT JMENO, COUNT(*) AS POCET
FROM ZAZNAM
WHERE DELETED = 0
GROUP BY JMENO
ORDER BY JMENO'
);
}
public function get(string $jmeno): Row|null
{
return $this->database->fetch(
'SELECT JMENO, COUNT(*) AS POCET
FROM ZAZNAM
WHERE DELETED = 0 AND JMENO = ?
GROUP BY JMENO',
$jmeno
);
}
public function existujeJmeno(string $jmeno, ?string $krome = null): bool
{
if ($krome === null) {
return $this->get($jmeno) !== null;
}
return $this->database->fetchField(
'SELECT TOP 1 ID FROM ZAZNAM WHERE DELETED = 0 AND JMENO = ? AND JMENO <> ?',
$jmeno,
$krome
) !== null;
}
/**
* Přejmenuje zvěstovatele ve všech jeho záznamech.
*/
public function uprav(string $puvodni, string $jmeno): void
{
if ($this->get($puvodni) === null || $puvodni === $jmeno) {
return;
}
$this->database->query(
'UPDATE ZAZNAM SET JMENO = ? WHERE JMENO = ?',
$jmeno,
$puvodni
);
}
}