zápis volby selectboxu do databáze

adferg
Člen | 31
+
0
-

Ahoj, trochu mě trápí asi banální problém, se kterým si nevím rady. Prosím, můžete mi poradit? Předem díky.

V presenteru v metodě createComponentNewRequestForm:

//Načtu si z databáze obsah select boxu
$activities = $this->database->table(‚activities‘)->select(‚id, name‘)->fetchPairs(‚id‘, ‚name‘);

//vytvořím formulářové pole
$form->addSelect(‚activity‘, '', $activities)
->setPrompt(‚Zadej‘)

//V šabloně se to chová správně a select box zobrazuje hodnoty
<select n:name=activity class=„w3-select w3-border“></select>

//A v metodě formSucceeded chci zapsat do databáze, ale zapisuje mi to id „aktivity“ nikoli hodnotu

$this->database->table(‚requests‘)->insert([
‚activity‘ ⇒ $data->activity,
 ]);

David Matějka
Moderator | 6445
+
0
-

to je spravne, do databaze chces ulozit ID do sloupecku activity_id, ktery bude mit cizi klic na tu tabulku activities

adferg
Člen | 31
+
0
-

Aha, díky. Přiznám se, že asi ne úplně rozumím co to znamená. Mohl bys mě prosím postrčit, kam sáhnout, aby se mi do těch sloupců zapisovaly hodnoty a ne čísla?

Kamil Valenta
Člen | 758
+
0
-
$activities = $this->database->table(‚activities‘)->fetchPairs(‚name‘, ‚name‘);

Ale David se Tě snaží správně navést, že není dobré chtít ve sloupci text a ne číselné ID.
Co když se hodnota name změní? Místo, aby sis jen změnil 1× v tabulce activities, budeš to muset změnit ve všech tabulkách, kam jsi to uložil. Pokud si uděláš vazbu přes ID, nemusíš to řešit…

adferg
Člen | 31
+
0
-

Nádhera, funguje, díky moc. Díky i za nasměrování ohledně lepšího postupu. Já si zatím jen tak hraju, takže takhle daleko ještě nejsem. Budu na to ale příště pamatovat.