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)