Русскоязычный форум, посвященный фреймворку Kohana

Все о фреймворке Kohana. Обсуждение уроков, документации.
Текущее время: 28 мар 2024, 19:13

Часовой пояс: UTC + 4 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу Пред.  1, 2
Автор Сообщение
СообщениеДобавлено: 06 сен 2012, 17:34 
Не в сети
Зеленый

Зарегистрирован: 23 авг 2012, 16:34
Сообщения: 9
Неужели нет ГУРУ, кто знает в чем трабла??? :(


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 07 сен 2012, 05:38 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
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?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 07 сен 2012, 13:10 
Не в сети
Зеленый

Зарегистрирован: 23 авг 2012, 16:34
Сообщения: 9
Sergey писал(а):
<...> В чём проблема то? <...>

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

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 07 сен 2012, 14:35 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
bsv писал(а):
Sergey писал(а):
<...> В чём проблема то? <...>

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

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

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


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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 07 сен 2012, 15:28 
Не в сети
Зеленый

Зарегистрирован: 23 авг 2012, 16:34
Сообщения: 9
Sergey писал(а):
Не морочьте голову ни себе ни людям.
То, что я написал — работает.
Читайте внимательнее

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 07 сен 2012, 16:46 
Не в сети
Зеленый

Зарегистрирован: 23 авг 2012, 16:34
Сообщения: 9
Код:
$user->birthDate = ($data['birthDate'] && $data['birthDate'] != '') ? $data['birthDate'] : NULL;
echo Debug::vars($data['birthDate'], $user->birthDate);


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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 08 сен 2012, 10:55 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 05 июн 2012, 03:08
Сообщения: 213
Цитата:
так если данные меняются (например, удаляется неверное значение), делается пустым (незаполненным), то надо заменить старое значение на 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',
);
 

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

_________________
http://de-en.info (работает на Kohana 3.3)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 4 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Все о фреймворке Kohana  | 
Powered by phpBB® Forum Software © phpBB Group