Kohana ORM вставляет NULL, а не пустую строку

В Kohana 3.2, когда вы перезаписываете «значения» функции ORM, а затем делаете что-то вроде:

public function values(array $values, array $expected = NULL) {           

  if($values['a_column'] == "") $values['a_column'] = NULL;

  return parent::values($values);
}

значение NULL в любом случае будет преобразовано в пустую строку, а это не то поведение, которое мне нужно. Кто-нибудь знает обходной путь? Я не мог найти ничего в документации или в Интернете...


person Pierre    schedule 19.07.2012    source источник


Ответы (2)


Я нашел ответ на это. Просто используйте фильтр в своей модели, например: -

public function filters()
{
  return array(
    'initial_assessment_date' => array(
      array(function($value) {
        return (!$value) ? NULL : $value;
      })
    )
  );
}
person Dan Herd    schedule 26.09.2012
comment
Большой! Я работал над этим в моем случае, но это полезно знать позже! :) - person Pierre; 27.09.2012

Это связано с тем, что более поздние значения ORM::values ​​используют array_key_exists. Вам нужно использовать unset, чтобы удалить значение.

person Federkun    schedule 19.07.2012
comment
Я думал об этом, и это работает при создании, но не при обновлении, так как удаление оставит значение db без изменений... - person Pierre; 19.07.2012
comment
Отсутствие этой функции меня, честно говоря, удивляет. - person Dan Herd; 26.09.2012