Nette\Database ekvivalent k fetchAssoc() z dibi

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
OndrejSlamecka
Člen | 41
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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.