Datagrid – setDataSource – způsoby získání dat pro grid

woo
Člen | 9
+
0
-

Ahoj. Mám dotaz ohledně nastavení dat z databáze. Cest bude asi hodně, ale potřeboval bych poradit od zkušenějších, jaký je rozdíl v nastavení dat pomocí setDataSource těmito způsoby:

obyč připojení na databázi:

$sql='SELECT * FROM table';
$grid->setDataSource($this->database->fetchAll($sql));

dibi připojení:

$grid->setDataSource($this->dibiConnection->select('*')->from('table'));

Díky

Editoval woo (27. 10. 2020 13:16)

Šaman
Člen | 2635
+
+2
-

To první vrací přímo pole s výsledky (fetchAll). Takže klidně milion záznamů, i když v datagridu jich máš zobrazených 10.
To druhé předává připravenou query, kterou si datagrid doplní o řazení, prefix a limit. A až pak si řekne o výsledky, jen ty které chce zobrazit.

(Jen pro úplnost – není moc rozdíl mezi Dibi a Nette\Database co se možností týče. Rozdíl je v tom, že v prvním případě voláš fetch a ve druhém ne.)

Editoval Šaman (27. 10. 2020 12:45)

woo
Člen | 9
+
0
-

Šaman napsal(a):

To první vrací přímo pole s výsledky (fetchAll). Takže klidně milion záznamů, i když v datagridu jich máš zobrazených 10.
To druhé předává připravenou query, kterou si datagrid doplní o řazení, prefix a limit. A až pak si řekne o výsledky, jen ty které chce zobrazit.

(Jen pro úplnost – není moc rozdíl mezi Dibi a Nette\Database co se možností týče. Rozdíl je v tom, že v prvním případě voláš fetch a ve druhém ne.)

Děkuji za vysvětlení. Jen pro objasnění mého dotazu. Měl jsem dříve problém s daty ohledně datagridu a na data jsem se dotazoval pomocí prvního případu fetchAll. To ale způsobilo nefunkční „bigEdit“ –mám nyní odzkoušeno i na příkladu od pana Jandy– A pokud použiju fetchAll, stane se mi při kliknutí na tlačítko edit „tužka“, že tlačítko pouze zmizí a program zřejmě netuší, který řádek dle ID editovat (dle mého názoru si nerozumí datové typy).
Pokud jsem ovšem nahradil fetchAll druhým použitím pro získání dat a to DIBI .. problém zmizel.
Pan Janda v příkladu popisuje, že jej připravil protože ho lidi často kontaktují s tím, že je datagrid nefunkční. Mohli by dělat stejnou chybu jako já, kde se pak projeví dříve zmíněné. Snad jsem byl pochopen…

To je důvod, proč hledám rozdíl.

Editoval woo (27. 10. 2020 13:15)

Šaman
Člen | 2635
+
+2
-

Asi to bude tím, že to první je prostě pole. Datagrid dokáže nějak pracovat s polem záznamů (zobrazit, seřadit, stránkovat), ale třeba v editaci je už problém. Pole už o žádné databázi nic neví.

Pro plné využití různých datagridů použij datasource s vazbou na databázi (což jsou asi všechny ostatní kromě ArrayDatasource). Takže v tom prvním případě předáš jen

$grid->setDataSource($this->database->table('table'));

viz https://contributte.org/…-source.html


Ještě k tomu ArrayDatasource – pokud to nutně nepotřebuješ (třeba opravdu pro zobrazení obyčejného pole v tabulce) tak ho nepoužívej. Veškeré řazení probíhá přes php funkce řazení polí, které je řádově pomalejší, než když to provedeš v databázi.

Editoval Šaman (27. 10. 2020 13:56)

woo
Člen | 9
+
+2
-

Šaman napsal(a):

Asi to bude tím, že to první je prostě pole. Datagrid dokáže nějak pracovat s polem záznamů (zobrazit, seřadit, stránkovat), ale třeba v editaci je už problém. Pole už o žádné databázi nic neví.

Pro plné využití různých datagridů použij datasource s vazbou na databázi (což jsou asi všechny ostatní kromě ArrayDatasource). Takže v tom prvním případě předáš jen

$grid->setDataSource($this->database->table('table'));

viz https://contributte.org/…a-source.htm

Děkuji. Věřím, že nebudu jediný, komu podobné stalo. Tak snad to pomůže více lidem. Pěkný zbytek dne…