В вашем случае, если объект, получаемый из $event->getParameters()['object'], не содержит значений полей, то, к сожалению, вам действительно придется делать дополнительный запрос к базе данных для получения нужных данных. Однако, есть несколько способов оптимизировать этот процесс. <br/> <br/> Проверка содержимого объекта: Убедитесь, что объект действительно не содержит значений полей. Возможно, вы неправильно интерпретируете содержимое объекта. <br/> <br/> Использование событий ORM: Некоторые ORM-системы предоставляют более удобные способы работы с событиями. Например, в некоторых системах можно подписаться на события до и после выполнения операций, что может позволить вам получить доступ к нужным данным без дополнительных запросов. <br/> <br/> Кэширование: Если вы часто выполняете такие операции, возможно, имеет смысл кэшировать результаты запросов, чтобы уменьшить нагрузку на базу данных. <br/> <br/> Вот пример, как можно проверить содержимое объекта и, если он действительно не содержит значений полей, выполнить дополнительный запрос: <br/> <br/> <pre><code class="php">class CertTable extends DataManager
{
public static function OnBeforeDelete(Event $event)
{
$id = $event->getParameter('id');
$object = $event->getParameter('object');
// Проверяем, содержит ли объект значения полей
if ($object && $object->get('FILE_ID')) {
$fid = $object->get('FILE_ID');
} else {
// Если объект не содержит значений полей, делаем дополнительный запрос
$item = self::getByPrimary($id)->fetchObject();
$fid = $item->get('FILE_ID');
}
// Удаляем файл, если FILE_ID найден
if ($fid) {
\CFile::Delete($fid);
}
}
}</code></pre> <br/> Этот код сначала проверяет, содержит ли объект значения полей. Если да, то использует их. Если нет, то выполняет дополнительный запрос к базе данных. <br/> <br/> Если вы используете Bitrix ORM, то, к сожалению, в текущей версии действительно может потребоваться дополнительный запрос для получения значений полей. В этом случае, ваша реализация с дополнительным запросом не является избыточной, а скорее необходимой мерой.