Модель возвращает в поле обьект Expression, вместо строки

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Cepairda
Сообщения: 17
Зарегистрирован: 2017.06.27, 17:51

Модель возвращает в поле обьект Expression, вместо строки

Сообщение Cepairda »

Всем привет. Собственно это открывок кода. В базу сохраняется строка как положенно. А возвращается обьект. Речь идёт о поле hash и hash_actual
Если сделать повторный запрос и не попадать в условие, то вернется строка.
Как быть ?

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

	  if ($hashDbCurrent !== $hashDbActual || $currentDateTimeStamp >= $updateDateHashTimeStamp) {
		$cdbExpression = new Expression('MD5(NOW())');
                $mba_info->hash = $cdbExpression;
                $mba_info->hash_actual = $cdbExpression;
                $mba_info->last_date_hash_update = $currentDate;
                $mba_info->save();
            }

            return $mba_info;
Аватара пользователя
Dominus
Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: Модель возвращает в поле обьект Expression, вместо строки

Сообщение Dominus »

Может так?

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

$cdbExpression = md5(date('Y-m-d H:i:s'));
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
Cepairda
Сообщения: 17
Зарегистрирован: 2017.06.27, 17:51

Re: Модель возвращает в поле обьект Expression, вместо строки

Сообщение Cepairda »

Dominus писал(а): 2022.09.11, 00:22 Может так?

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

$cdbExpression = md5(date('Y-m-d H:i:s'));
Я не могу так генерировать. По той причине что у меня в БД есть триггеры которые тоже генерируют MD5(NOW()) для этой же таблицы. И в коде тоже нужно генерировать средствами SQL. Ибо PHP и СУБД на разных серверах. И может отличаться время при разной генерации.
Аватара пользователя
Dominus
Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: Модель возвращает в поле обьект Expression, вместо строки

Сообщение Dominus »

Cepairda писал(а): 2022.09.11, 00:28 Я не могу так генерировать. По той причине что у меня в БД есть триггеры которые тоже генерируют MD5(NOW()) для этой же таблицы. И в коде тоже нужно генерировать средствами SQL. Ибо PHP и СУБД на разных серверах. И может отличаться время при разной генерации.

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

$expression = new Expression('MD5(NOW())');
$cdbExpression = (new \yii\db\Query)->select($expression)->scalar();
Вы пытаетесь задать время в момент заполнения атрибутов модели. В момент сохранения, как вы говорите, триггеры СУБД сами генерят время, поэтому что бы вывести только что сохраненную модель, вам нужно делать запрос, для получения актуальных данных для этой модели, иначе время будет отличаться. Тут тогда не зачем задавать время, оно все равно перепишется триггерами, или тут задавать, а отключить триггеры, тогда запрос на получение актуальных данных, не потребуется.
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
Аватара пользователя
Dominus
Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: Модель возвращает в поле обьект Expression, вместо строки

Сообщение Dominus »

Cepairda писал(а): 2022.09.10, 23:55 Всем привет. Собственно это открывок кода. В базу сохраняется строка как положенно. А возвращается обьект. Речь идёт о поле hash и hash_actual
Если сделать повторный запрос и не попадать в условие, то вернется строка.
Как быть ?

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

	  if ($hashDbCurrent !== $hashDbActual || $currentDateTimeStamp >= $updateDateHashTimeStamp) {
		$cdbExpression = new Expression('MD5(NOW())');
                $mba_info->hash = $cdbExpression;
                $mba_info->hash_actual = $cdbExpression;
                $mba_info->last_date_hash_update = $currentDate;
                $mba_info->save();
            }

            return $mba_info;

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

//...
    $mba_info->save();
    $mba_info->refresh();
}

return $mba_info;
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
Ответить