Метод ->remove()

Я и раньше наталкивался на странную работу данного метода, но вот есть такой вопрос.
У нас есть товар, у которого есть опции. Мне надо удалить их.
Делаю так:
$msProductOption = $modx->getIterator('msProduct', array('id' => 1137));

foreach($msProductOption as $option){
    $many = $option->getMany('Options');
    foreach($many as $m){
        $m->set('value', '');
        $m->save();
        //var_dump($m->remove());
    }
}
Данный способ не изменяет значение на пустоту и не удаляет, выдает false
Вроде бы это обычный объект, почему не изменяет значения и не срабатывает удаление?
Михаил
17 сентября 2019, 19:22
modx.pro
1
1 070
0
Поблагодарить автора Отправить деньги

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

Михаил
17 сентября 2019, 19:35
0
В общем смысл такой, что данный метод есть только у наследников xPDOSimpleObject а опции в товаре от xPDOObject.
А как тогда очищать в товаре значения опций?
    Михаил
    17 сентября 2019, 19:47
    0
    В общем решение вот такое:
    $product = $modx->getObject('msProduct', array('id' => 1137));
    
    $options = $product->loadData()->get('options');
    
    $opt = array();
    foreach($options as $key => $val){
        $opt[$key] = array();
    }
    $product->set('options', $opt);
    $product->save();
      Артем
      18 сентября 2019, 02:18
      0
      Честно говоря, msProductOption вообще имеет какую-то проблемную таблицу и с ним постоянно всплывают какие-то нюансы, буквально недавно наткнулся ровно на ту же проблему, напрямую получал объект msProductOption, менял значение через xPDOObject::set(), сохранял, а в таблице ничего не менялось, при этом и ошибок никаких не было, xPDOObject::save() возвращал true. Скажу даже больше, использование xPDO вместо объектов тоже не решило эту проблему, данные все так же не менялись. Вероятно, это связано с отсутствием PK в этой таблице как такового, другой причины не вижу.

      Собственно, остается работать с этой таблицей только через PDO, именно так это и реализовано в методе msProductData::saveProductOptions(), который вызывается во время сохранения товара.
        Михаил
        18 сентября 2019, 07:19
        0
        Само интересно, что этим способом он сохраняет в таблицу, но именно потом сменить значение на получиться. Т.е. первая запись пройдет успешно но поменять или удалить уже не получится
      Володя
      18 сентября 2019, 07:47
      +1
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        5