Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I set a date to NULL in Yii?

I have a date column that usually takes values as dd.MM.yyyy. Its validation rule in the model's rules() is this:

array('start, end', 'date', 'format' => 'dd.MM.yyyy'),

I'm populating the database from a CSV file, and I'd like to be able to set the date to NULL (i.e. nothing) if the CSV record is empty. So, I'm doing:

if (empty($csv_data)) {
  $user->start = new CDbExpression('NULL');
} else {
  $user->start = $csv_data;
}

But I get an error that the date format is invalid. Why is that?

The CDateValidator documentation says that the allowEmpty property is true by default, so it should be able to set this to NULL, right? Note that if I just assing the "" string to the date, it'll convert it to a 0000-00-00 00:00:00 timestamp, which is not NULL.

like image 692
slhck Avatar asked Feb 13 '13 09:02

slhck


2 Answers

in model rules():

array('start, end', 'date', 'format' => 'dd.MM.yyyy'),
array('start, end', 'default', 'setOnEmpty' => true, 'value' => null),

also,

if (empty($csv_data)) {
  $user->start = null;
} ...

should do the trick too.

like image 71
Imre L Avatar answered Oct 03 '22 01:10

Imre L


The trivial fix for this is not to set the value at all during creation:

if (!empty($csv_data)) {
  $user->start = $csv_data;
}

This way, the date will not be set and thus appear as empty, which also passes validation.

like image 44
slhck Avatar answered Oct 03 '22 00:10

slhck