SELECTBOX načítaný z databáze
- Minoru
- Člen | 11
Zdravím,
do Nette už jsem nějakou dobu nedělal a skoro všechno jsem zapomněl. Takže tu jsem jako začátečník. :P Každopádně bych potřeboval pomoct. Mám dvě tabulky. První označuje knižní série a druhá knižní svazky. Série je rodičem svazků. Např.:
Série: Harry Potter
Svazek: Vězeň z Azkabanu
A tyhle data bych potřeboval vypsat do selectboxu, buď v tomto tvaru: Série – svazek a nebo
Série
- Svazek
- Svazek 2
- …
Série 2
- Svazek
- …
Pomohl by mi někdo?
- Oli
- Člen | 1215
v dokumentaci
píšou jak na to.
Jinak z db dostaneš pole třeba takhle
$arr = array();
foreach $this->booksRepository->getAll() as $book {
$arr[$book->id] = $book->serie->title.' - '.$book->title
}
Když si s tím pohraješ, tak by jsi měl dostat i tu stromovou strukturu
- honos
- Člen | 109
Uz se to tady resilo ale nemuzu to najit.
Zkus se podivat sem
a sem
Nebo pouzit neco takoveho:
$polozkySelect = [];
foreach($this->database->select('name')->from('knihy') as $row){
foreach($row->ref('svazky') as $svazek){
$polozkySelect[$row->name][$svazek->id] = $svazek->name;
}
}
Ja ti ted nevim jestli je to zcela spravne ale Jako takovy htuby nastrel by
ti to mohlo poslouzit. Dale je to zavisle jakou presne pouzivas strukturu DB a
nasledne podle toho pouzijes $row->ref(...)
nebo
$row->related(...)
a pod…
EDIT: Aneb jak pisi @Oli
Editoval honos (9. 2. 2014 12:07)
- Minoru
- Člen | 11
honos napsal(a):
Uz se to tady resilo ale nemuzu to najit.
Zkus se podivat sem a semNebo pouzit neco takoveho:
$polozkySelect = []; foreach($this->database->select('name')->from('knihy') as $row){ foreach($row->ref('svazky') as $svazek){ $polozkySelect[$row->name][$svazek->id] = $svazek->name; } }
Ja ti ted nevim jestli je to zcela spravne ale Jako takovy htuby nastrel by ti to mohlo poslouzit. Dale je to zavisle jakou presne pouzivas strukturu DB a nasledne podle toho pouzijes
$row->ref(...)
nebo$row->related(...)
a pod…EDIT: Aneb jak pisi @Oli
Díky. Je ale v pořádku mít cyklus v cyklu? Jiná metoda mě sice nenapadá, ale asi to nebude nejrychlejší.
- Minoru
- Člen | 11
Zdravím,
mám tu další problém a nechci kvůli tomu zakládat další téma. V presenteru vytvářím komponentu:
/**
* Vytvoří komponentu formuláře pro přidávání/upravování svazků
* @return $form Formulář
*/
protected function createComponentUpdateVolumeForm()
{
$form = new Nette\Application\UI\Form;
$form->addText("name", "Název svazku:")
->setRequired("Musíš vyplnit název svazku!");
$series = $this->database->table("series")->where("author = ?", $this->user->id)->fetchAll();
$form->addSelect("series", "Série:", $series)
->setRequired();
$form->addSubmit("send", "Uložit");
$form->onSuccess[] = $this->updateVolumeFormSucceeded;
return $form;
}
Ale proměnná $series mi vrací jenom ID, zatímco samotný dotaz (když ho
nechám proběhnout v admineru) mi vrátí ID i NAME. (Má to vracet řádky
id
a name
.)
Díky předem. :)
- jiri.korejtko
- Člen | 8
Minoru napsal(a):
Zdravím,
mám tu další problém a nechci kvůli tomu zakládat další téma. V presenteru vytvářím komponentu:
/** * Vytvoří komponentu formuláře pro přidávání/upravování svazků * @return $form Formulář */ protected function createComponentUpdateVolumeForm() { $form = new Nette\Application\UI\Form; $form->addText("name", "Název svazku:") ->setRequired("Musíš vyplnit název svazku!"); $series = $this->database->table("series")->where("author = ?", $this->user->id)->fetchAll(); $form->addSelect("series", "Série:", $series) ->setRequired(); $form->addSubmit("send", "Uložit"); $form->onSuccess[] = $this->updateVolumeFormSucceeded; return $form; }
Ale proměnná $series mi vrací jenom ID, zatímco samotný dotaz (když ho nechám proběhnout v admineru) mi vrátí ID i NAME. (Má to vracet řádky
id
aname
.)Díky předem. :)
Snad ti pomůžu, to samé jsem už kdysi řešil. Použil jsem
$categoryPairs = $this->categoryExercisesRepository->findAll()->
fetchPairs('id_category_exercises', 'name_category_exercises');
kde pomocí fetchPairs(‚id_category_exercises‘, ‚name_category_exercises‘); jsem si vyselectoval 2 sloupce, které jsem zrovna potřeboval :)