Неправильный формат created_at
Неправильный формат created_at
У меня в таблице поле created_at определено как TimeStamp. В модели есть TimestampBehavior::className(), При создании записи выскакивает Invalid datetime format: 1292 Incorrect datetime value: '1423049189' for column 'created_at' at row 1
Пробовал добавить 'attributes' => ['created_at', 'updated_at'], тогда писало что call_user_func() expects parameter 1 to be a valid callback, class 'created_at' not found
Еще вопрос влияют ли как то комментарии * @property string $created_at и какого типа должна быть created_at в модели?
Пробовал добавить 'attributes' => ['created_at', 'updated_at'], тогда писало что call_user_func() expects parameter 1 to be a valid callback, class 'created_at' not found
Еще вопрос влияют ли как то комментарии * @property string $created_at и какого типа должна быть created_at в модели?
Re: Неправильный формат created_at
в базе данных тип столбца должен быть int
Re: Неправильный формат created_at
TimestampBehavior - это класс поведения в котором вы можете сами настроить формат. У вас формат хранения не соответствует тому что генерит поведения
ЧТо бы изменить формат записи можете использовать анонимные функции.
Более подрбнее как можно задать формат, есть тут http://www.yiiframework.com/doc-2.0/yii ... lue-detail
Комментарии к классу никак не влияют на код. Они влияют на понимания кода и на взаимодействие кода с IDE
ЧТо бы изменить формат записи можете использовать анонимные функции.
Код: Выделить всё
public function behaviors()
{
return [
[
'class' => TimestampBehavior::className(),
'createdAtAttribute' => 'created_at',
'updatedAtAttribute' => 'updated_at',
'value' => function(){ return date('Y-m-d');},
],
];
}
Комментарии к классу никак не влияют на код. Они влияют на понимания кода и на взаимодействие кода с IDE
Re: Неправильный формат created_at
Я провел эксперимент подставил в и TimestampBehavior value => 1 все равно получаю Incorrect datetime value: '1423069878' Это значить что Behavior не работает при наследовании?
Re: Неправильный формат created_at
вам показывают пример с анонимкой, а вы подставляете 1.Erik писал(а):Я провел эксперимент подставил в и TimestampBehavior value => 1 все равно получаю Incorrect datetime value: '1423069878' Это значить что Behavior не работает при наследовании?
Либо Expression либо анонимка
-
- Сообщения: 251
- Зарегистрирован: 2014.08.18, 14:01
Re: Неправильный формат created_at
Бл* у меня печальнее у меня timestamp не понятно откуда милисикунды вклеивает только в log Dbtarget .
такого вида 1423069878 превращает в 1423069878.0000
такого вида 1423069878 превращает в 1423069878.0000
Re: Неправильный формат created_at
Я отдебажил что там внутри делается. Могу сказать, что параметр value равен null! То есть что то с регистрацией не ладно.
Re: Неправильный формат created_at
я вам уже указал на ошибку, вы не написали, что исправили. покажите код.Erik писал(а):Я отдебажил что там внутри делается. Могу сказать, что параметр value равен null! То есть что то с регистрацией не ладно.
Re: Неправильный формат created_at
К сожалению я вас просто не понимаю.
Мой последний вариант: 'timestamp' => [
'class' => TimestampBehavior::className(),
'value' => function(){ return date('U'); }, // unix timestamp
Я отдебажил до этой функции:
Что находится в $this->value не показывается! Но возвращает тоже что и time() хотя выполняет call_user_func. Как посмотреть что в Object of class Closure не ясно. Пробовал $this->value->expression вылетает.
Мой последний вариант: 'timestamp' => [
'class' => TimestampBehavior::className(),
'value' => function(){ return date('U'); }, // unix timestamp
Я отдебажил до этой функции:
Код: Выделить всё
protected function getValue($event)
{
if ($this->value instanceof Expression) {
return $this->value;
} else {
return $this->value !== null ? call_user_func($this->value, $event) : time();
}
}
Последний раз редактировалось Erik 2015.02.06, 15:24, всего редактировалось 1 раз.
Re: Неправильный формат created_at
ну так все верно.Erik писал(а):К сожалению я вас просто не понимаю.
Мой последний вариант: 'timestamp' => [
'class' => TimestampBehavior::className(),
'value' => function(){ return date('U'); }, // unix timestamp
Я отдебажил до этой функции:Что находится в $this->value не показывается! Но возвращает тоже что и time() хотя выполняет call_user_func.Код: Выделить всё
protected function getValue($event) { if ($this->value instanceof Expression) { return $this->value; } else { return $this->value !== null ? call_user_func($this->value, $event) : time(); } }
1. проверяем не является ли value Expression $this->value instanceof Expression. Если нет, то
2. проверяем не неопределенный ли $this->value $this->value !== null. если нет
3. выполняем анонимку, в вашем случае это date('U'), возращающий unix timestamp.
4. Если же value неопределен, то присваиваем time(), который возвращает тот же unix timestamp.
Re: Неправильный формат created_at
Может быть и верно, но в базу не пишет!
Re: Неправильный формат created_at
а это уже другой вопрос. может валидацию не проходит. может атрибут в правилах не прописан.Erik писал(а):Может быть и верно, но в базу не пишет!
Re: Неправильный формат created_at
Нашел!!!!!!!!
Вот правильное выражение: 'value' => new Expression('CURRENT_TIMESTAMP()'),
Вот правильное выражение: 'value' => new Expression('CURRENT_TIMESTAMP()'),
Re: Неправильный формат created_at
этот пример указан в доках, только там now(). А возвращает эта функция не unix timestamp, который вы пытались записать в БД. Соответственно и не получалось.Erik писал(а):Нашел!!!!!!!!
Вот правильное выражение: 'value' => new Expression('CURRENT_TIMESTAMP()'),