Select multi level výpis do formuláře
- jAkErCZ
- Člen | 322
Zdravím,
Snažím se zprovoznit select multi level.
Zatím sem došel do fáze kdy mám toto:
private function formatReasons($reasons, $parentId) {
$tree = array(); // Vytvoříme prázdný strom
// Pokusíme se najít položky, které patří do rodičovské kategorie ($parentId)
foreach ($reasons as $reason) {
if ($reason->parent_reason_id == $parentId) {
// Položku přidáme do nového stromu a rekurzivně přidáme strom podpoložek
$tree[$reason->title] = [
$reason->reason_id => $reason->title
];
}
}
bdump($tree);
return $tree; // Vrátíme hotový strom
}
public function getReasons($showAll = false)
{
$reasons = $this->database->table('reason'); // Získá seznam kategorií z databáze.
if (!$showAll)
$reasons->where('NOT hidden'); // Schová skyté komentáře
$reasons->order('order_no'); // Seřadí výsledek.
return $this->formatReasons($reasons->fetchAll(), null); // Vratí výsledný strom.*/
}
A to vrací
DB:
DROP TABLE IF EXISTS `reason`;
CREATE TABLE `reason` (
`reason_id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(100) COLLATE utf8_czech_ci NOT NULL,
`order_no` int(11) NOT NULL,
`hidden` tinyint(4) NOT NULL,
`parent_reason_id` int(11) DEFAULT NULL,
PRIMARY KEY (`reason_id`),
KEY `perrent_reason_id` (`parent_reason_id`),
CONSTRAINT `reason_ibfk_1` FOREIGN KEY (`parent_reason_id`) REFERENCES `reason` (`reason_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;
Jak co nejefektivněji mám tedy vrátit select level?
Díky