Ukládání NULL do databáze

- lukas-frana
 - Člen | 10
 
Ahoj,
Mám formulář a v něm
$form->addText('number', 'Číslo');
Problém je, že pokud hodnota není vyplněná, tak se do databáze se sloupcem ‚number‘ int(11) uloží 0, ale já potřebuji uložit NULL. Nette si někde musí zjišťovat typ sloupce a automaticky doplnit do query 0. Výchozí hodnota sloupce je přitom nastavená na NULL.
Napadlo mě pouze
foreach ($values as $key => & $value) if ($value == '') unset($values[$key]);
Ale není to ideální
Prosím o pomoc a předem děkuji
Editoval lukas-frana (25. 6. 2016 12:20)

- GEpic
 - Člen | 566
 
Altimit napsal(a):
ono ti to neukládá nette, ale samotná databáze. ono to bere tak, že když je pole prázdné tak tam nic nedá, ale v číselném oboru nic = 0
Ano, ale v programování 0 neni NULL.
Jinak https://secure.php.net/…y-filter.php
Editoval GEpic (26. 6. 2016 18:23)

- kalatalabnik
 - Člen | 35
 
Co používáš za knihovnu na spojení do DB?
Např. v dibi je přímo modifikátor:
%iN	integer, ale 0 se přeloží jako NULL

- lukas-frana
 - Člen | 10
 
Používám Nette\Database a mám dojem, že tohle dělá Nette, protože nuly jsou už ve SQL. Pokud nechám prázdný prvky z pole odstranit, tak se to nestane. Pak mám další otázku, která s tím nepřímo souvisí, ale nechci zakládat nové téma:
Toto mám v BasePresenteru
$form->onSuccess[] = function (Form $form) {
            $values = $form->getValues();
            foreach ($values as $key => $value) if ($value == '') unset($values[$key]);
            $form->setValues($values, true);
            print_r($form->getValues());
        };
Nevím proč, ale pořád mi to vypisuje původní hodnoty.
Díky moc za funkci array_filter(), určitě ji použiji.

- Unlink
 - Člen | 298
 
lukas-frana napsal(a):
Používám Nette\Database a mám dojem, že tohle dělá Nette, protože nuly jsou už ve SQL.
A ako to tam vkladáš?
$this->db->table('tabulka')->insert(['stlpec' => '']);
$this->db->query('INSERT INTO tabulka', ['stlpec' => '']);
Oba vygenerujú:
INSERT INTO `tabulka` (`stlpec`)
VALUES ('')
A db si prázdny reťazec prekonvertuje na 0.
Nevím proč, ale pořád mi to vypisuje původní hodnoty.
Lebo vymazal si tie ktoré boli prázdne, a potom ich nanovo nastavil s earse = TRUE, ale vymazanie textinputov neznamená že budú mať null ale proste ''. https://github.com/…TextBase.php#L35
Editoval Unlink (27. 6. 2016 20:41)