Multiplier – jak zapsat do DB

kruty
Člen | 5
+
0
-

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
+
0
-

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é.