Вот здесь https://idea.1c-bitrix.ru/mass-update-...ts-in-orm/ просили добавить массовое удаление в ORM Битрикса. Поскольку функции deleteAll() так и не появилось, предлагаю использовать следующее решение:
class YourEntityTable extends Entity\DataManager
{
public static function deleteAll()
{
if(!is_callable(array(get_parent_class(__CLASS__), "deleteAll"))){
global $DB;
return $DB->Query("TRUNCATE TABLE " . self::getTableName(), true);
} else {
return parent::deleteAll();
}
}
/* ... your code ... */
}
Если разработчики Bitrix допишут соответствующую функцию, то вызываться будет именно она.
1) Про global $DB уже сказали. 2) TRUNCATE не работает для таблиц, на которые стоят внешние ключи. 3) В большинстве случаев static предпочтительнее self 4) Битрикс не обязан называть методы так, как у вас. Проверку на наличие в родительском классе можно смело удалять.
Как минимум, я бы предложил такой вариант:
public static function deleteAll() { $connection = static::getEntity()->getConnection(); $connection->queryExecute('DELETE FROM '.static::getTableName()); }
Вадим Прокопенко, 1) Да, вы правы. 2) TRUNCATE может не работать для таблиц, на которые стоят внешние ключи. А может работать. О разнице между TRUNCATE и DELETE тут наверное нет смысла подробно распространяться. 3) Если планируется дальнейшее наследование от данного класса, то вы правы. Но я себе плохо представляю такую ситуацию в данном случае. 4) Не обязан. Но суть поста в том, что если это случится, то использовать родной метод Битрикса.
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».