Prázdné hodnoty z formuláře jako NULL do DB

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

Mám problém při ukládání dat z formuláře do MySQL databáze.

V DB je položka date typu DATETIME které mohou být NULL a mají výchozí hodnotu NULL.
Ve formuláři když tuto položku nevyplním, a vezmu data z formuláře a rovnou je vložím do DB přes DIBI, tak se tam snaží dát prázdný string.

<?php
  $this->model->insert($form->getValues());
?>

Což se databázi nelíbí a vyhodí chybu Incorrect datetime value: '' for column 'date' at row 1. SQL je následující:

INSERT INTO `serviceteam` (`name`, `surname`, `nickname`, `birthnumber`, `email`, `tel`,
`date`, `note`, `note_iternal`)
VALUES ('Někdo', 'Nevimkdo', 'Hovado', '000000/0000', 'neco@neco.cc', '', '', '', '')

Jak najlépe docílit toho, aby se tam DIBI nesnažilo vkládat '' ale NULL ?

Editoval elektricman (18. 1. 2010 21:42)

Bernard Williams
Člen | 207
+
0
-

Nazdárek,

zatím jediné, co mě napadá, je to rozepsat a použít modifikátor %sn:

$data = $form->getValues();
dibi::query('INSERT INTO [table] (column1) VALUES (%sn);', $data['key1']);

Bernard

Michalek
Člen | 211
+
0
-
<?php
  $values = $form->getValues();
  $values['date%sn'] = $values['date']
  unset($values['date']);
  $this->model->insert($values);
?>

Editoval Michalek (19. 1. 2010 22:15)

David Grudl
Nette Core | 8227
+
0
-

co nějaké foreach ($values as & $value) if ($value === '') $value=NULL

elektricman
Člen | 29
+
0
-

2David, to mě napadlo, ale říkal sem si jestli to nejde líp

2Michal: Jako např totok .. fahčí skvěle.. díky!

David Grudl
Nette Core | 8227
+
0
-

V poslední revizi lze použít

ArrayTools::renameKey($values, 'date', 'date%sn');