ActiveController + TimestampBehavior

Всё что касается построения API
Ответить
Аватара пользователя
sluchainiyznak
Сообщения: 617
Зарегистрирован: 2013.05.19, 17:51
Откуда: ХМАО-Югра, г. Сургут
Контактная информация:

ActiveController + TimestampBehavior

Сообщение sluchainiyznak »

Здравствуйте уважаемые форумчане.
Столкнулся с такой проблемой:
Моделька самая банальная

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

//в качесте эксперимента использую sqlite
class User extends \yii\db\ActiveRecord
{
    ...
    public function behaviors()
    {
        return [
            [
                'class' => TimestampBehavior::className(),
                'createdAtAttribute' => 'created_at',
                'updatedAtAttribute' => 'updated_at',
                'value' => function(){ return new Expression('current_timestamp');},
            ],
        ];
    }
    ...
    
}
Так как тему размещаю в ветке API, то соответственно и вопрос касается API, контроллер:

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

class User extends \yii\rest\ActiveController
{
    ...
    public $modelClass = 'app\models\User';
    ...
}
Внимание вопрос (возможно баг) - после создания новой записи через данный контроллер, он мне возвращает атрибуты "created_at" и "updated_at" вот в таком виде - {"expression":"current_timestamp","params":[]}

Подскажите пожалуйста кто сталкивался с такой проблемкой, как победить?

з.ы.: если это действительно баг, то прошу людей, которые на ты оформить тикет в баг-трекере, потому как сам не смогу грамотно это сделать
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: ActiveController + TimestampBehavior

Сообщение slavcodev »

Это не баг. Ты используешь поведение которое устанавливает дату через выражение. Либо используй `time()` для данных, либо обнови ($model->refresh()) модель после сохранения, чтоб подтянуть данные которые установил БД
Жду Yii 3!
Аватара пользователя
sluchainiyznak
Сообщения: 617
Зарегистрирован: 2013.05.19, 17:51
Откуда: ХМАО-Югра, г. Сургут
Контактная информация:

Re: ActiveController + TimestampBehavior

Сообщение sluchainiyznak »

Спасибо большое за подсказку
astronin
Сообщения: 606
Зарегистрирован: 2012.01.30, 17:46

Re: ActiveController + TimestampBehavior

Сообщение astronin »

а в базу записывается нормальное значение?
попробуйте в коде написать так
'value' => new Expression('current_timestamp'),
или
'value' => function ($event) {return time()},
кажется, функция должна возвращать строку, а у вас возвращается объект, вот и выдает строковое представление объекта
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: ActiveController + TimestampBehavior

Сообщение slavcodev »

astronin, Expression это специальный класс который содержит в себе функцию mysql которую вставляет в sql при запросе. В данном случае `NOW()` т.е. значение столбца подсчитает сам MySQL сервер. И поэтому нужно запросить новые данные для модели, после сохранения.
Жду Yii 3!
astronin
Сообщения: 606
Зарегистрирован: 2012.01.30, 17:46

Re: ActiveController + TimestampBehavior

Сообщение astronin »

да, я знаю, что это за класс, и я не против того, чтоб сделать обновление после сохранения
просто интересно, что в базе сохраняется
Аватара пользователя
sluchainiyznak
Сообщения: 617
Зарегистрирован: 2013.05.19, 17:51
Откуда: ХМАО-Югра, г. Сургут
Контактная информация:

Re: ActiveController + TimestampBehavior

Сообщение sluchainiyznak »

В базе конечно же всё в порядке, сохраняется нормальное время
Ответить