Всем привет.
Никто еще не задавался сабджем?
p.s. ну вот какой гений впихнул это в обновление, которое не ломает обратную совместимость?..
2.0.14, как отключить встроенную теперь поддержку json-полей
Re: 2.0.14, как отключить встроенную теперь поддержку json-полей
Поля использовались этого типа.
Упал геттер, так как в полях вместо json string - array, а Json::encode сильно расстраивается с array вместо json.
Но это малая печаль.
Упал еще и setter, так как теперь он ждет массив и расстраивается, получив строку. А там еще и логики навернуто.
Последний раз редактировалось DfK 2018.02.19, 23:32, всего редактировалось 1 раз.
Re: 2.0.14, как отключить встроенную теперь поддержку json-полей
Когда меняется 2.0.*, предполагается, что код будет работать на любой из них, если не использовал баг какой.
А тут добавили улучшение, которое разрушило работающий код, да ещё и без явной возможности сходу это отключить.
Re: 2.0.14, как отключить встроенную теперь поддержку json-полей
json строка - это формат хранения. А вы логику на этом завязали и в вызывающем коде json строками модель настраиваете.
Такие вещи обычно делались - в событии after_find из json в массив преобразуется, в beforeSave() обратное. Сейчас они это автоматизировали по типу поля.
Yii2 universal module sceleton - for basic and advanced templates
Re: 2.0.14, как отключить встроенную теперь поддержку json-полей
то есть если в коде в beforeSave было это привидение - то JsonExpression со строки типа не расстраивался? там падение идет в методе save(), так что я не вижу особой разницы между тем, в каком из мест кода идет приведение массива в json.maleks писал(а): ↑2018.02.20, 09:56json строка - это формат хранения. А вы логику на этом завязали и в вызывающем коде json строками модель настраиваете.
Такие вещи обычно делались - в событии after_find из json в массив преобразуется, в beforeSave() обратное. Сейчас они это автоматизировали по типу поля.
интересно, а такая (7.0):
php > var_dump(json_encode(''));
string(2) """"
ситуация как обрабатывается?
как раз с ActiveQuery::all() и ::one() особой проблемы нет, так как все ActiveQuery в приложении наследуют AbstractQuery, который и переопределяет эти методы.