Русскоязычный форум, посвященный фреймворку Kohana
http://forum.kohanaframework.su/

Самопроизвольное изменение типа данных при записи в Users ((
http://forum.kohanaframework.su/viewtopic.php?f=33&t=340
Страница 2 из 2

Автор:  bsv [ 06 сен 2012, 17:34 ]
Заголовок сообщения:  Re: Самопроизвольное изменение типа данных при записи в User

Неужели нет ГУРУ, кто знает в чем трабла??? :(

Автор:  Sergey [ 07 сен 2012, 05:38 ]
Заголовок сообщения:  Re: Самопроизвольное изменение типа данных при записи в User

bsv писал(а):
Такая проблема:
в модели Users создал дополнительное поле:
Код:
`birthDate` date DEFAULT NULL


Не в модели, а в схеме таблицы.

В модели у вас может быть быть записано так:
Код:
  protected $_table_columns = array(
    'id'        => array('type' => 'int'),
    ...
    'birthDate' => array('type' => 'int'),
    ...
  );

Это раз.

Во вторых, в таблице тогда пишите так:
Код:
CREATE TABLE `users` (
  `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
   ...
  `birthDate` INT(11) NOT NULL DEFAULT '0',
   ...
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;


Далее..
Цитата:
Если данных по `birthDate` нет, то хочу записать 'NULL'...

Если данных по `birthDate` нет, то писать ничего не надо!

Цитата:
В модели сохраняю данные:
Код:
...
$user->birthDate = ($data['birthDate']) ? $data['birthDate'] : NULL;
$user->save();
...



Тут например в БД пишется $birth_date, которая в вашем случае могла быть такой — 1340892242:
Код:
$birth_date = (isset($data['birthDate']) AND ! empty ($data['birthDate'])) ? $data['birthDate'] : NULL;
if($birth_date != NULL)
{
   $user->birthDate = $birth_date;
}


Показать в удобоваримом виде такую дату можно так:
Код:
date($format, $timestamp); 


Под $format можно завести в конфиге строку, типа такой: "j, n, Y" и читать это оттуда:
Код:
date(Kohana::$config->load('site.dateformat'), $timestamp); 


Где site — имя вашего файла с конфигами, dateformat — формат даты, о котором вы прочтёте тут: http://www.php.net/manual/ru/function.date.php, ну а $timestamp в этом примере, это то самое пресловутое 1340892242, которое мы сохранили в таблицу. По моему всё элементарно, ватсон :)

В общем я всё усложнил специально, чтоб показать вам, насколько многогранно может быть решение. Я вообще не вижу никакой сложности у вас. В чём проблема то? Или забыли, что NULL это тоже значение, которое всегда будет isset?

Автор:  bsv [ 07 сен 2012, 13:10 ]
Заголовок сообщения:  Re: Самопроизвольное изменение типа данных при записи в User

Sergey писал(а):
<...> В чём проблема то? <...>

Проблема в том, что в другой модели, где в таблице создано абсолютно такое же поле, как и в User, NULL пишется без проблем…

Что касается
Sergey писал(а):
Если данных по `birthDate` нет, то писать ничего не надо!

так если данные меняются (например, удаляется неверное значение), делается пустым (незаполненным), то надо заменить старое значение на NULL.
А вместо NULL "самопроизвольно"(?) передается строка с пустым значением, тогда как я принудительно присваиваю переменной значение NULL (если нет данных).

Автор:  Sergey [ 07 сен 2012, 14:35 ]
Заголовок сообщения:  Re: Самопроизвольное изменение типа данных при записи в User

bsv писал(а):
Sergey писал(а):
<...> В чём проблема то? <...>

Проблема в том, что в другой модели, где в таблице создано абсолютно такое же поле, как и в User, NULL пишется без проблем…

Что касается
Sergey писал(а):
Если данных по `birthDate` нет, то писать ничего не надо!

так если данные меняются (например, удаляется неверное значение), делается пустым (незаполненным), то надо заменить старое значение на NULL.
А вместо NULL "самопроизвольно"(?) передается строка с пустым значением, тогда как я принудительно присваиваю переменной значение NULL (если нет данных).


Не морочьте голову ни себе ни людям.
То, что я написал — работает.
Читайте внимательнее

Автор:  bsv [ 07 сен 2012, 15:28 ]
Заголовок сообщения:  Re: Самопроизвольное изменение типа данных при записи в User

Sergey писал(а):
Не морочьте голову ни себе ни людям.
То, что я написал — работает.
Читайте внимательнее

Голову никто никому не морочит!
Я просил помощи в разрешении вопроса, а не дать рабочий пример.

В очередной раз повторю, что в ДРУГОЙ (не User) модели ВСЕ РАБОТАЕТ... а в User - нет.
Разница в моделях только та что User наследуется от Auth_User, а другая модель - от ORM.
В этом и есть непонятка: ПОЧЕМУ при записи (или присваивании значения) переменной в User меняется тип???

Автор:  bsv [ 07 сен 2012, 16:46 ]
Заголовок сообщения:  Re: Самопроизвольное изменение типа данных при записи в User

Код:
$user->birthDate = ($data['birthDate'] && $data['birthDate'] != '') ? $data['birthDate'] : NULL;
echo Debug::vars($data['birthDate'], $user->birthDate);


Делая такой "контрольный" вывод, вижу следующее:
Код:
NULL
string(0) ""

т.е. значение в $data NULL, а в $user УЖЕ пустая строка ((((

Автор:  AmberLEX [ 08 сен 2012, 10:55 ]
Заголовок сообщения:  Re: Самопроизвольное изменение типа данных при записи в User

Цитата:
так если данные меняются (например, удаляется неверное значение), делается пустым (незаполненным), то надо заменить старое значение на NULL.

А так?
Код:
$user->birthDate = ($data['birthDate']) ? $data['birthDate'] : unset($data['birthDate']);
$user->save(); 

Или как-то так
Код:
$data['birthDate'] = $data['birthDate'] ? $data['birthDate'] : NULL;

$user = ORM::factory('user')
    ->where('username', '=', 'kiall')
    ->find()
    ->update_user($data, array(
        'birthDate',
);
 

Да вы бы скинули минимальный код вашего рабочего примера в архиве. А то вы там мудрите, а воспроизводить у себя времени нет. Так бы развернул быстро пример и посмотрел в чем засада.

Страница 2 из 2 Часовой пояс: UTC + 4 часа [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/