Не сохраняет strtotime

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
skit
Сообщения: 135
Зарегистрирован: 2012.10.08, 12:50
Откуда: Сибирь
Контактная информация:

Не сохраняет strtotime

Сообщение skit »

Здравствуйте!
Подскажите, что делаю не так?

Из формы отправляю дату, например 24.04.2017, в базе храню даты в int(11). Ситуация не понятная, в beforeSave привожу дату к UNIX, а в базу попадает 0. Причем это при create, при update все как нужно.

Form: input → date → d.m.Y

Model:

beforeSave

Код: Выделить всё

  var_dump($model->date); // 27.04.2017

  $model->date = strtotime($model->date)

   var_dump($model->date); // 1493154000

Mysql → date int(11) → 0

AfterSave показывает 1493154000, а в базу пишется 0.

Если сделать в beforeSave так:

Код: Выделить всё

$model->date = 1493154000;

То всё запишется нормально.

Так

Код: Выделить всё

$model->date = (int) strtotime($model->date) 
→ все равно в базу пишет 0.

Лог Mysql query показывает `date`=0;

Если дату сделать strtotime в afterValidate, то всё как надо.

Пробовал вардампить в activeRecord перед execute (:y7 => 1493154000) и после afterSave (date => 1493154000), там все нормально.
Если делать не через strtotime(), а через new Date(), например, то выкидывает исключение PHP, что передан boolean.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Не сохраняет strtotime

Сообщение zelenin »

проверяй ошибки валидации $model->getErrors(), посмотри правила валидации.
skit
Сообщения: 135
Зарегистрирован: 2012.10.08, 12:50
Откуда: Сибирь
Контактная информация:

Re: Не сохраняет strtotime

Сообщение skit »

zelenin писал(а): 2017.04.14, 12:44 проверяй ошибки валидации $model->getErrors(), посмотри правила валидации.
Поле date в safe, ошибок валидации нет, хотя бы потому, что afterSave говорит, что в поле int, как и предполагалось.
В beforeSave, поле приходит строкой, я его привожу к Unix формату, в случае проблем с валидацией в beforeSave был бы null.
Пробовал ставить соответствующий валидатор — то же самое.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Не сохраняет strtotime

Сообщение zelenin »

skit писал(а): 2017.04.14, 13:27
zelenin писал(а): 2017.04.14, 12:44 проверяй ошибки валидации $model->getErrors(), посмотри правила валидации.
Поле date в safe, ошибок валидации нет, хотя бы потому, что afterSave говорит, что в поле int, как и предполагалось.
В beforeSave, поле приходит строкой, я его привожу к Unix формату, в случае проблем с валидацией в beforeSave был бы null.
Пробовал ставить соответствующий валидатор — то же самое.
поведение может быть?
в конце концов xdebug тебе поможет за 3 минуты.
skit
Сообщения: 135
Зарегистрирован: 2012.10.08, 12:50
Откуда: Сибирь
Контактная информация:

Re: Не сохраняет strtotime

Сообщение skit »

тут проект наперехимичен, всякое может быть. Я поведений не увидел, но делал всё это такой маг, волшебник и маньяк, что не удивлюсь ни чему.
Придется ставить xdebug и врубать дебаг. Просто комп еле дишит, условия адские. Тут f5 -то нажимать опасно...

Просто это не единственный случай, проблем с сохранением int
skit
Сообщения: 135
Зарегистрирован: 2012.10.08, 12:50
Откуда: Сибирь
Контактная информация:

Re: Не сохраняет strtotime

Сообщение skit »

Дебагер валится ошибкой, вероятно памяти не хватат.

Всё равно победа! Save() вызывался дважды, во второй раз дата обнулялась.
Контроллер с простым CRUD на 2000 строк, без дебагера найти было бы очень не просто.
Быдлокод высшего качества!
Ответить