Multiplier – jak zapsat do DB
- kruty
- Člen | 5
Ahoj,
už delší dobu se snažím vytvořit formulář do kterého potřebuji mít
možnost dynamicky přidávat řádky. K tomu se mi tedy již podařilo
rozchodit multiplier, ale nějak se vůbec nejsem schopen odrazit od toho jak
tento formulář zpracovat respektive zapsat do DB.
V rámci nějakého mého testovacího formu to vypadá takto:
protected function createComponentNewMemberForm()
{
//níže zajištuje zabezbečení
if (!$this->getUser()->isLoggedIn()) {
$this->redirect('Sign:up');
}
$form = new Form;
//test multiplier
$copies = 1;
$maxCopies = 10;
$multiplier = $form->addMultiplier('multiplier', function (Nette\Forms\Container $container, Nette\Forms\Form $form) {
$container->addText('pok1', 'Pok1')
->setDefaultValue('My value');
$container->addText('pok2', 'Pok2')
->setDefaultValue('My value');
$container->addText('pok3', 'Pok3')
->setDefaultValue('My value');
}, $copies, $maxCopies);
$multiplier->addCreateButton('Add')
->addClass('btn btn-primary');
$multiplier->addRemoveButton('Remove')
->addClass('btn btn-danger');
//konec testu
$form->addText('jmeno1', 'Jméno:')
->setRequired();
$form->addText('prijmeni', 'Příjmení:')
->setRequired();
$form->addText('regnr_new', 'Registrační číslo:')
->setRequired();
$form->addText('regnr_old', 'Registrační číslo staré:')
->setRequired();
$form->addSubmit('send', 'Přidat člena');
$form->onSuccess[] = [$this, 'newMemberFormSucceeded'];
return $form;
}
Do doby než jsem tam přidal multiplier, tak jsem formulář zpracovával takto:
public function newMemberFormSucceeded(Form $form, array $values)
{
if (!$this->getUser()->isLoggedIn()) {
$this->error('Pro uložení, nebo editování se musíte přihlásit.');
}
{
$ID = $this->getParameter('ID');
if ($ID) {
$listofmembers = $this->database->table('listofmembers')->get($ID);
$listofmembers->update($values);
} else {
$listofmembers = $this->database->table('listofmembers')->insert($values);
}
$this->flashMessage("Člen byl úspěšně přidán", 'success');
$this->redirect('Clenove:memberlist');
}
}
No a teď prostě nějak netuším jak mu říct, že hodnoty z jedné části formuláře má zapsat do tabulky „listofmembers“ a hodnoty z multiplieru do tabulky „mutiptest“
Díky za radu
- Mistrfilda
- Člen | 76
Ahoj,
tvá nová tabulka “mutiptest” musí odkazovat na hráče – např. user_id – cizí klíč
Hodnoty z formuláře budeš muset rozdělit, např. takto pro nový záznam
$multiplierValues = $values['multiplier'];
unset($values['multiplier']);
$listofmembers = $this->database->table('listofmembers')->insert($values);
//zjištění user ID
$userId = $listofmembers->id;
//Insert jednotlivých hodnot do db
foreach ($multiplierValues as $multiplierValue) {
//přiřazení user id do multiplier hodnot
$multiplierValue['user_id'] = $userId;
//insert hodnot
$this->database->table('mutiptest')->insert($multiplierValue);
}
S Nette database jsem dlouho nedělal, tak si nejsem jistý jestli není efektivnější způsob insertu – např. https://doc.nette.org/…ase/explorer#… – vícenásobný insert
Editace bude složitější, nejjednodušší asi bude při update smazat aktuální hodnoty pro daného hráče z tabulky mutiptest a poté uložit nové.