Načtení dat z databáze do textového pole

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

Zdravím, rád bych se zeptal, jak udělat to, aby se mi načítala data z databáze do textového pole popřípadě textarea. Toto pole bych pak dále editoval ( tady už vím jak ). Poradí mi někdo? Raději přidám zdroják daleného modelu pro načtení dat z databáze:

use Nette\Database\Connection,
	Nette\Database\Table\Selection;

class CenikAdmin extends Selection{

	public function __construct(\Nette\Database\Connection $connection){
		parent::__construct('cenik', $connection);
	}
}

a presenteru kde vytvářím komponentu s textovým polem:

public function createComponentCenik(){
		$form = new Form();
		$form->addText('stroj', 'Nazev stroje:', 50);
		return $form;
	}
ViPEr*CZ*
Člen | 817
+
0
-

Form má metodu setValues a každý prvek pak má metodu setValue. První metoda bere argument jako pole, kde index je jméno políčka a hodnota se pak přiřadí podle hodnoty u indexu. Druhá metoda pak bere argument jako řetězec, který pak nastaví prvku. Více v dokumentaci. ;-)

duke
Člen | 650
+
0
-

Myslím, že více se k tomu hodí nastavit výchozí hodnoty formuláře přes setDefaults. Více v dokumentaci zde.

xmilde
Člen | 13
+
0
-

duke napsal(a):

Myslím, že více se k tomu hodí nastavit výchozí hodnoty formuláře přes setDefaults. Více v dokumentaci zde.

Díky…na to jsem koukal, ale nevím právě jak to zapsat, abych tahal data z databáze. Nebyla by prosím nějaká praktická ukázka?

petr.pavel
Člen | 535
+
0
-

Nepochopil jsem tvůj CenikAdmin, takže ho ignoruju. Pro naplnění výchozími hodnotami každopádně není potřeba.

Schéma může být následující (z hlavy):

<?php
class Admin_CenikPresenter extends Admin_BasePresenter {
  public function renderEdit($cenikId) {
    $cenik = $db->cenik[$cenikId];
    // už jsem zapomněl syntaxi Nette/Database, tohle je pro NotORM
    $this['cenik']->setDefaults($cenik);
  }

  public function createComponentCenik() {
    // ...
  }
}
?>
duke
Člen | 650
+
0
-

Řádek pro NotORM:

$cenik = $db->cenik[$cenikId];

… lze v Nette Database zapsat buď takto:

$cenik = $db->table('cenik')->get($cenikId);

… nebo takto:

$selection = $db->table('cenik');
$cenik = $selection[$cenikId];

To druhé je spíš pozůstatek z NotORM, takže raději ten první způsob. Nedokážu říct, jaký je mezi těmito dvěma způsoby konkrétní rozdíl, ale nějaký nejspíš bude (vliv na cachovaní, optimalizaci dotazů, atp.).

Jinak celý adresář praktických ukázek s Nette\Database máš zde.