Oznámení
Ignorovanie prazdnych hodnot pri vkladani do databazy z pola
před 7 lety
- fliper333
- Člen | 36
Ahojte,
Potreboval by som poradit, ci dibi dokaze pri vkladani riadku do databazy
ignorovat „prazdne“ hodnoty (0, ''). Formulare vytvaram v nette a po
uspesnej validacii ukladam udaje do DB takto nejak:
"
dibi::query('INSERT INTO [table]', $this->_form->getValues());
(v skutocnosti to mam rozdelene medzi controllerom a modelom, sem to pisem do 1 prikazu pre zjednodusenie)
Problem je v tom, ak su vo formulari nepovinne polia, a uzivatel ich nevyplni, tak sa do databazy ulozi prazdny string, co potom robi problemy napriklad funkcii COALESCE. Momentalne to robim tak, ze si vysledok ulozim do pomocnej premmenej, foreachom ju prejdem a vymazem prazdne hodnoty. Takto nejak:
$values = $this->_form->getValues();
foreach ($values as $key => $value) if ($value === '') unset($values[$key]);
dibi::query('INSERT INTO [table]', $values);
Viem ze ak udaje vkladam po jednom tak existuju modifikatory napr %sN, ktore funguju vinijakuco, ale daju sa tieto modifikatory pouzit aj v mojom pripade? Ak ano ako?
Za odpoved vopred dakujem :)
před 7 lety
- fliper333
- Člen | 36
Este to upresnim. Ak ukadam do DB hodnoty, pouzivam
foreach ($values as $key => $value) if ($value === '') $values[$key] = NULL;
Aby sa povodne hodnoty prepisali NULL, ak ich uzivatel vymazal.
Ak hladam v databaze, pouzivam
foreach ($values as $key => $value) if ($value === '') unset($values[$key]);
aby dibi ignoroval nevyplnene udaje vo vyhladavacom formulari
PS: Pre selecty mam vytvorenu funkciu, ktora do zoznamu moznosti prida „prazdnu moznost“ tak, ze jej hodnota je prazdny string, aby som selecty mohol precistit spolu s textovymi vstupmi.
function _addEmptyOption($options, $optionKey = NULL, $optionVal = '')
{
return array($optionKey => $optionVal) + $options;
}
před 7 lety
- Milo
- Nette Core | 1119
Žádnou takovou „automatiku“ dibi neumí. Při insertu nebo updatu lze v poli použít modifikátor u klíče, ale ve Tvém případě to nepomůže.
dibi::query('INSERT INTO [tabulka]', array(
'id%i' => 1,
'name%sN' => $name,
));
před 7 lety
- fliper333
- Člen | 36
Jasne, chapem. To co si napisal obcas pouzivam ako riesenie, ale da sa pouzit iba v pripade, ze je pole ktore vkladam staticke (v pripade ak formular generujem dynamicky podla prav uzivatela by som si to iba viac skomplikoval).
Dakujem za odpoved.