Nette\Database ekvivalent k fetchAssoc() z dibi
- OndrejSlamecka
- Člen | 41
Ahoj,
v databázi mám tabulku s událostmi. Každá událost má nastavenou svoji hodinu a den. Tyto události bych chtěl vykreslit v tabulce: S dibi jsem používal fetchAssoc(‘day,hour’) (nebo podobně) abych získal takovéto pole
<?php
array(
'1' /* den */ => array(
'1' /* hodina */ => array( array(...) /* udalost */, array(...) /* udalost */ ),
'2' /* hodina */ => array( array(...) /* udalost */ )
)
);
?>
Chtěl bych získat pole se stejnou strukturou i s Nette\Database, to však nemá metodu fetchAssoc(). Je možné získat takové pole (nebo nějak procházet databázi), nebo si mám napsat vlastní řešení? Nebo bych měl k problému přistupovat uplně jiným způsobem?
Díky
V anglickém fóru: https://forum.nette.org/…s-fetchassoc
Editoval OndrejSlamecka (4. 9. 2011 14:30)
- Filip Procházka
- Moderator | 4668
Nette\Database z principu nepotřebuje fetchAssoc. Prostě ty data čteš tak jak jsou v databázi. Pokud ti to nevyhovuje, změň strukturu databáze tak, aby dávala smysl.
- OndrejSlamecka
- Člen | 41
Jakou strukturu by pak databáze měla mít? Každá událost má den (1–7 – jedná se o rozpis vždy na jeden týden), hodinu (0–23) a název. V jednom čase může být víc událostí. Napadá mě, že bych mohl strukturu změnit tak, že bych navíc vytvořil tabulku dny (o sedmi řádcích) a tabulku hodiny o 7*24 řádcích a použil:
<?php
foreach( $db->table('days') as $day )
{
foreach( $day->related('hours') as $hour )
/* Timto ziskam vsechny events ktere se vztahuji ke konkretni hodine v tydnu */
$events = $hour->related('events');
}
?>
To samo o sobě dává smysl, ale přijde mi zbytečné dělat tabulku se seznamem dnů a hodin. Celkově to ale stejně bude špatná myšlenka, protože kdybych chtěl události rozepisovat na celý rok… ale nic lepšího mě teď nenapadá.
PS: Možná mám špatně syntax, čerpám z dokumentace, nemám to vyzkoušené.
- Filip Procházka
- Moderator | 4668
S Nette\Database ani NotORM zkušenosti nemám, ale předpokládám, že tohle se tam bude řešit trošku jinak.
Předpokládám, že protože to takto „groupuješ“, tak to chceš vypisovat v šabloně, jinak by to nemělo smysl.
Asi nejlepší by bylo na svůj dotaz si udělat pohled a pak z něj číst data správně seřazená.
{foreach $radky as $radek}
<h1 n:if="$iterator->first">Den {$radek->day}</h1>
<h2 n:if="$iterator->first">Hodina {$radek->hour}</h2>
<p>- {$radek->description}</p>
<h1 n:if="$iterator->nextValue->day !== $radek->day">Den {$radek->day}</h1>
<h2 n:if="$iterator->nextValue->hour !== $radek->hour">Hodina {$radek->hour}</h2>
{/foreach}
Určitě by to šlo napsat i lépe.
Tak jo, uznávám, že by se fetchAssoc hodil, ale to bude určitě kvůli mé neznalosti nástroje. Zkus se zeptat v diskuzní skupině NotORM, jak by tento úkol řešil Jakub.