Как можно оптимизировать данный код

Есть каталог(id-20) внутри которого собраны все товары. У каждого товара есть tv поле с id подкаталога где они должны быть.
Я написал такой код который должен перемещать товар из каталога с id 20 в подкаталог, id которого написан в TV поле
$arr =  $modx->getChildIds(20,1,array('context' => 'web'));
foreach($arr as $id){
  $res = $modx->getObject('modResource', $id);
  $parent = $res->getTVValue('parent');
  $res->set('parent', $parent);
  $res->save();
}
Но консоль напрочь зависает после двух секунд работы и выдаёт окошко с ошибкой.
Как можно решить проблему краша в этом случае?
Марк
27 декабря 2019, 20:42
modx.pro
195
0

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

Тодор
28 декабря 2019, 00:19
0
Делай проверку на существования значения $parent
$arr =  $modx->getChildIds(20,1,array('context' => 'web'));
$collection = $modx->getCollection('modResource', array('id:IN' => $arr));
foreach($collection as $res){
    $parent = $res->getTVValue('parent');
    if(is_int($parent)){
        $res->set('parent', $parent);
        $res->save();
    }
}
    Артем
    28 декабря 2019, 00:51
    0
    на минуточку, в тв всегда хранится строка, поэтому проверять на is_int чуть более, чем бесполезно.
      Марк
      28 декабря 2019, 21:50
      0
      Также благодарю за решение, скоро скажу что из вариантов сработало
      Артем
      28 декабря 2019, 00:52
      0
      foreach ($modx->getIterator(modResource::class, ['parent' => 20]) as $object) {
          if (($parent = $object->getTVValue('parent')) && is_numeric($parent)) {
              $object->set('parent', $parent);
              $object->save();
          }
      }
        Марк
        28 декабря 2019, 21:49
        0
        Спасибо за код, сейчас протестирую и отозвусь
        Сергей Шлоков
        28 декабря 2019, 08:23
        0
        Но консоль напрочь зависает после двух секунд работы и выдаёт окошко с ошибкой.
        Как можно решить проблему краша в этом случае?
        Внимание, вопрос — что в черном ящике?
          Марк
          28 декабря 2019, 21:48
          0
          В чёрном ящике ошибка 502
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          7