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 | 115
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
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) {
?>