55 lines
1.5 KiB
PHP
55 lines
1.5 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Repository;
|
|
|
|
use PDO;
|
|
|
|
final class DictionaryRepository
|
|
{
|
|
public function __construct(private PDO $pdo)
|
|
{
|
|
}
|
|
|
|
public function getEntityByCode(string $code): ?array
|
|
{
|
|
$st = $this->pdo->prepare('SELECT * FROM dd_entities WHERE code = :c AND is_active IS TRUE');
|
|
$st->execute([':c' => $code]);
|
|
$e = $st->fetch(PDO::FETCH_ASSOC);
|
|
if (!$e) {
|
|
return null;
|
|
}
|
|
|
|
$e['fields'] = $this->getFields((int)$e['id']);
|
|
$e['rules'] = $this->getRules((int)$e['id']);
|
|
return $e;
|
|
}
|
|
|
|
public function getFields(int $entityId): array
|
|
{
|
|
$st = $this->pdo->prepare('SELECT * FROM dd_fields WHERE entity_id = :id ORDER BY ui_order NULLS LAST, id');
|
|
$st->execute([':id' => $entityId]);
|
|
return $st->fetchAll(PDO::FETCH_ASSOC);
|
|
}
|
|
|
|
public function getRules(int $entityId): array
|
|
{
|
|
$st = $this->pdo->prepare('SELECT * FROM dd_rules WHERE entity_id = :id AND active IS TRUE');
|
|
$st->execute([':id' => $entityId]);
|
|
return $st->fetchAll(PDO::FETCH_ASSOC);
|
|
}
|
|
|
|
public function getEnum(string $name): array
|
|
{
|
|
$st = $this->pdo->prepare('
|
|
SELECT ev.code, ev.label
|
|
FROM dd_enums e JOIN dd_enum_values ev ON ev.enum_id = e.id
|
|
WHERE e.name = :n AND ev.active IS TRUE
|
|
ORDER BY ev.sort_order, ev.id
|
|
');
|
|
$st->execute([':n' => $name]);
|
|
return $st->fetchAll(PDO::FETCH_ASSOC);
|
|
}
|
|
}
|