Как можно быстро удалить несколько десятков тысяч товаров?
Нужно перезалить товары магазина, а для этого нужно очистить предыдущие товары в категориях от существующих, но при попытке удалить категорию вместе с товарами ничего не происходит и через batcher по 20 товаров несколько десятков тысяч нет смысла удалять.
Можно ли быстро удалить все товары на сайте без переустановки modx?
Можно ли быстро удалить все товары на сайте без переустановки modx?
Комментарии: 9
Скриптом через Console.
Можно удалить по шаблону… или просто все товары без разбора. Например, вот — по шаблону:
$template = 1;
$resources = $modx->getCollection('modResource', array('template'=>$template));
foreach($resources as $resource) {
$resource->remove();
}
Это если подчистую удалять.
Запустил скрипт в консоли вставив айди шаблона и получил
Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 20480 bytes) in /home/login/www/core/xpdo/om/xpdoobject.class.php on line 2390
Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 28672 bytes) in Unknown on line 0
getCollection загружает сразу все в память, не прокатит, действительно памяти не хватит.
Удаляйте или по 1 (getObject) в цикле, или если это долго, то можно getCollection, но за один раз штук по 50.
Удаляйте или по 1 (getObject) в цикле, или если это долго, то можно getCollection, но за один раз штук по 50.
getIterator работает также как и getCollection, но не загружает все объекты в память, а только по одному когда в цикле перебор идёт. Память жрёт существенно меньше.
Спасибо, просмотрю
$template = 8;
$q = $modx->newQuery('modResource', array('template'=>$template));
$q->limit(100);
$resources = $modx->getCollection('modResource', $q);
foreach($resources as $resource) {
$resource->remove();
}
Так, верно?
Не кидайтесь пожалуйста тапками, в php я новичок :(
Можно вот так:
$resources = $modx->getIterator('modResource', [
'template' => 8
]);
foreach ($resources as $resource) {
$resource->remove();
echo "Ресурс {$resource->pagetitle}({$resource->id}) удалён\r\n";
}
Запускать лучше в modalConsole, это компонент такой.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.