Массовое удаление

Здравствуйте! Вроде бы не нашёл на сайте.
Как сделать чтобы можно было удалять по списку артикулов продукты с сайта именно по списку, т.е. массово
Спасибо.
Евгений Кузнецов
21 марта 2014, 07:47
modx.pro
2 872
0

Комментарии: 6

Василий Наумкин
21 марта 2014, 14:15
0
Интересно, как можно выборочно удалить несколько записей из базы данных? Наверное, нужно сделать какой-то запрос?

Что-то вроде такого, наверное:
$q = $modx->newQuery('msProduct');
$q->innerJoin('msProductData', 'msproductData', 'msProduct.id = msProductData.id');
$q->where(array('msProductData.article:IN' => array('артикул1','артикул2','и т.д.')));

$modx->removeCollection('msProduct', $q);
    Евгений Кузнецов
    21 марта 2014, 22:00
    0
    в итоге удаляет весь «web». Т.е. не создает в $q не создаётся array для removeCollection…
      Василий Наумкин
      21 марта 2014, 22:13
      0
      Проверил на тесте и правда — удаляет. Причем, если использовать getCollection — то все правильно, а если remove — то нет.

      Или это баг, или я туплю. Тогда так:
      $q = $modx->newQuery('msProduct');
      $q->innerJoin('msProductData', 'msProductData', 'msProduct.id = msProductData.id');
      $q->where(array('msProductData.article:IN' => array('артикул1','артикул2','и т.д.')));
      
      $collection = $modx->getIterator('msProduct', $q);
      foreach ($collection as $item) {
      	$item->remove();
      }
        Евгений Кузнецов
        22 марта 2014, 14:19
        0
        Да, спасибо, так работает.
        <?php
        $lines=array();
        $file = fopen(MODX_CORE_PATH.'import/delete.csv', 'r');
        if ($file) {
        	echo "Файл ".$file." загружен...";
        	while (!feof($file)) {
        	 $lines[]=fgets($file);
        	}
        
        	$q = $modx->newQuery('msProduct');
        	$q->innerJoin('msProductData', 'msProductData', 'msProduct.id = msProductData.id');
        	$q->where(array('msProductData.article:IN' => $lines));
        	$collection = $modx->getIterator('msProduct', $q);
        	foreach ($collection as $item) {
        		$item->remove();
        	}
        
        fclose($file);
        } else {
        	echo "Не могу найти файл".$file;
        }
        Не могу догнать, почему так не работает? где ошибка?
          Евгений Кузнецов
          23 марта 2014, 14:59
          0
          При этом «print_r($lines);» выдаёт:
          Array ( [0] => 4411 [1] => 161060 [2] => 161062 [3] => 171572 )
            Евгений Кузнецов
            23 марта 2014, 16:11
            0
            array $lines все значения перевёл из string в int и всё заработало…
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      6