Доброго времени суток! Вчера (30.06.2020) после обновления системы до последней стабильной версии (20.0.1198), собственный функционал,который написанный с использованием ORM битрикса, стал генерировать sql запрос, который пытается получить несуществующее в таблице поле VALUE ошибка возникает при использовании метода fill.
Код
public function __construct($id){
\Bitrix\Main\Loader::IncludeModule("iblock");
$this->oIBlockMatch = \Bitrix\Iblock\Iblock::wakeUp(self::ID_BLOCK_MATCH);
$this->oIBlockCommand = \Bitrix\Iblock\Iblock::wakeUp(self::ID_BLOCK_COMMAND);
$this->oMatch = $this->oIBlockMatch->getEntityDataClass()::getByPrimary($id)->fetchObject();
// При вызове метода, происходит ошибка.
$this->oMatch->fillGoLineup();
...
}
Такое происходит с полями, которые не являются множественными. Множественные поля выбираются без проблем. Значения свойств инфоблока хранятся в отдельных таблицах
Дмитрий Медведев, не совсем касается orm, но после обновления, методы для выборки свойств инфоблока GetPropertyValuesArray и ему подобные - стали работать нереально медленно. выборка иногда доходит до 300-400 секунд. поднял локально обновленное ядро и ядро до обновления - в обновленном наблюдаются долгие выборки, в ядре до обновления все происходит относительно быстро
Владислав Сысойлов,подробнее, пожалуйста. Этот метод не менялся уже год как минимум. Можете отладку включить и дать раскладку по времени - что именно тормозит, запросы или обработка на php?
Не надо сверлить зубы через задний проход дрелью от Сваровски
Дмитрий Медведев написал: Добрый день! Это ошибка для инфоблоков 2.0, исправление выйдет в ближайшем обновлении.
Цитата
Евгений Жуков написал: Сколько записей в b_iblock_element и в b_iblock_element_property?
а есть ли какие нибудь советы как обойти эти проблемы сейчас? У нас боевой проект, который не работает после обновления, клиент жалуется и несет убытки. Подскажите, в какую сторону смотреть.
Исправление выйдет в iblock 20.0.800. Пока что можно вручную пропатчить:
файл iblock/lib/property.php
+use Bitrix\Iblock\ORM\ElementV1Entity;
- if ($realValueColumnName !== 'VALUE') + if ($elementEntity instanceof ElementV1Entity && $realValueColumnName !== 'VALUE')
помогло, спасибо)))
А по поводу вопроса с методом GetPropertyValuesArray есть какая нибудь информация? стандартные компоненты, которые его используют - жутко тормозят, приходиться на свои переписывать без GetPropertyValuesArray и подобных.