Jak na hodnoty u radiolistu vytažené z db?
- xciza
- Člen | 194
Ahoj, na webu mám radio list který mám zatím řešený tak, že mám dány defaultní hodnoty pro každou možnost:
$materials = array(
'0.85' => 'Název mat. 1',
'0.9' => 'Název mat. 2',
);
$form->addRadioList('mat', 'Materiál: ', $materials);
Potřeboval bych ale do toho pole načítat hodnoty uložené v db, protože je uživatel bude moci měnit. Hodnoty v poli budou cena a název. Tabulka má tři sloupce – id, nazev, cena. Jak hodnoty v poli $materials mohu nahradit cenou a nazvem z db? Používám NotORM.
Díky
- David Ďurika
- Člen | 328
ked chces menit cenu a nazov tak preco do davas do RadioList-u ? pouzi na to
uplne inu componentu…
daj si tam 2 addText() (vykreslis to X krat, podla poctu riadkov) a mas po
starosti
- David Ďurika
- Člen | 328
no tak ked submitne form, tak si z DB vytiahnes cenu toho materialu…
ak to chces pocitat este pred odoslanim tak, pouzi addHidden kde si ulozis
tie ceny…
- David Ďurika
- Člen | 328
jasne ze sa da… hore si prasal ze ju zakaznik nesmie vidiet, a teraz ju uz chces vytiahnut?
ukaz ako vytahujes data do toho radioListu
- xciza
- Člen | 194
Já data z db zatím netahám. V prvním příspěvku je to defaultně nastavený tak jak to nette dovoluje – žádné data z db.
$materials = array(
'0.85' => 'Název mat. 1',
'0.9' => 'Název mat. 2',
);
Čísla (0.85, 0.9) nejsou na webu viditelné, ale pak s těmi hodnotami můžu pracovat. Např. takto:
$CM = $form->values->mat;
Ale ty čísla a názvy bych potřeboval nahradit hodnotami z db.
- xciza
- Člen | 194
Takto mě laděnka vypíše hlášku:
Cannot read an undeclared property AdminModule\DefaultPresenter::$connection.
Pro připojení k tabulkám používám továrničky a když to upravím takto:
$array = $this->context->createMaterial()->fetchPairs('cena', 'nazev');
Tak to vybere pouze poslední hodnotu z tabulky material…
- David Ďurika
- Člen | 328
aha sry, ja som tam hore zle pochopil…
ale toto
$array = $this->context->createMaterial()->fetchPairs('cena', 'nazev');
by ti malo ist…
ake tovarnicky pouzivas ? btw. pouzitie tovarniciek nieje najstastnejsia
volba…
namiesto tovarnicek pouzi servisu https://github.com/…/config.neon#L44
a tu mas ukazky nejakych modelov https://github.com/…er/app/model
Editoval achtan (17. 9. 2012 7:29)
- xciza
- Člen | 194
Továrničku mám takto:
factories:
material: Material
a k tomu model:
<?php
use Nette\Database\Connection,
Nette\Database\Table\Selection;
class Material extends Selection {
public function __construct(Connection $connection) {
parent::__construct('material', $connection);
}
}
Koukal jsem do nového quickstartu, že se používají už spíše services, ale musel bych celou aplikaci předělat od začátku.
EDIT: Dotaz v debug baru pak vypadá takto:
SELECT `id`, `nazev`, `cena`
FROM `material`
Editoval xciza (17. 9. 2012 7:36)
- David Ďurika
- Člen | 328
xciza napsal(a):
EDIT: Dotaz v debug baru pak vypadá takto:SELECT `id`, `nazev`, `cena` FROM `material`
cize dotaz je spravny… chyba bude niekde inde…
- mas v tabulke viac zaznamov ?
- urcite ti vrati len jeden ?
- xciza
- Člen | 194
Ano v db mám 3 záznamy. A ano vypíše to pouze poslední záznam. Viz zde . Mat. 3 je název posledního záznamu. Hodil bych celou aplikaci na web, ale zatím nemám kam.
Edit: Tak sem zkusil takto:
$array = $this->context->createMaterial()->fetchPairs('id', 'nazev');
kde místo cena jsem dal id a to jde… Ale tím pádem pracuji s id materiálu a ne s cenou
Editoval xciza (17. 9. 2012 10:23)
- David Ďurika
- Člen | 328
nemas nahodou rovnaku cenu u tych produktov? tak to je jasne ze ti vypise
len jeden…
myslim si ze tu uz neriesime problem s nette…
- David Ďurika
- Člen | 328
sprav toto
<?php
$array = $this->context->createMaterial()->fetchPairs('cena', 'nazev');
dump($array);
?>
a uvidis co presne ti to vratilo…
- Patrik Votoček
- Člen | 2221
to vypadá na chybu v NotORM a s tím prosím sem https://groups.google.com/forum/?…
- leninzprahy
- Člen | 150
Zkusil bych změnit typ sloupce v DB, jestli se to pak bude chovat stejně, třeba na float, pak případně na string (varchar)
S NotORM nepracuju a nevím jak tam je udělané přetypování získaných dat, takže je to možná blbost…