Změna dat v databázi za pomocí while

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Zdeno1981
Člen | 114
+
0
-

Zdravím,

potřebuju poslat do databáze data z formuláře za pomocí cyklu while, to se mi částečně daří ale zasekl jsem se a nevím jak dal, problém je že se změní pouze jeden záznam v db a to hned první dotaz na update.

když zakomentuji řádek

<?php

//$this->settings->where('name', $value)->update(array('value' => $key));

?>

a odkomentují zde řádky, tak se vloží úspěšně 2 dotazy do databaze a údaje se změní, nevěděl by někdo poradit jak to upravit na ten model?

<?php

    public function settingsFormSubmitted(AppForm $form) {

        $values = $form->values;

        if ($form['save']->isSubmittedBy()) {

            //$database = new Connection('mysql:host=localhost; dbname=nette', 'root', 'root');
            $record = array($values->website_title => 'website_title', $values->website_description => 'website_description',);

            while (list($key, $value) = each($record)) {

                $this->settings->where('name', $value)->update(array('value' => $key));
                //$database->exec("UPDATE settings SET VALUE = '$key' WHERE name = '$value' LIMIT 1;");
            }
        }
    }

?>
frosty22
Člen | 373
+
0
-

Co máš v property $setting, respektive:

<?php
var_dump($this->settings);
?>

⇒ Tohle je instance jakého objektu? Pokud používáš NotOrm, či tedy komponentu Database, která z části z NotORM vychází, tak by snad mělo být něco jako:

<?php
// v případě, že si do $this->db uložíš připojení na databázi
$this->db->settings()->where('name', $value)->update(array('value' => $key));
?>

Jinak bych možná doporučil spíše využívat foreach namísto konstrukce while (list – each):

<?php
while (list($key, $value) = each($record)) {
?>

nahradit:

<?php
foreach ($record as $key => $value) {
?>
voda
Člen | 561
+
0
-

Nejedná se o podoný problém jako u kumuovani podminek pri vice SQL dotaze po sobe?