Метод ->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Вроде бы это обычный объект, почему не изменяет значения и не срабатывает удаление?
Комментарии: 5
                В общем смысл такой, что данный метод есть только у наследников xPDOSimpleObject а опции в товаре от xPDOObject.
А как тогда очищать в товаре значения опций?
                    А как тогда очищать в товаре значения опций?
                В общем решение вот такое:
                    $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();            
                Честно говоря, msProductOption вообще имеет какую-то проблемную таблицу и с ним постоянно всплывают какие-то нюансы, буквально недавно наткнулся ровно на ту же проблему, напрямую получал объект msProductOption, менял значение через xPDOObject::set(), сохранял, а в таблице ничего не менялось, при этом и ошибок никаких не было, xPDOObject::save() возвращал true. Скажу даже больше, использование xPDO вместо объектов тоже не решило эту проблему, данные все так же не менялись. Вероятно, это связано с отсутствием PK в этой таблице как такового, другой причины не вижу.
Собственно, остается работать с этой таблицей только через PDO, именно так это и реализовано в методе msProductData::saveProductOptions(), который вызывается во время сохранения товара.
                    Собственно, остается работать с этой таблицей только через PDO, именно так это и реализовано в методе msProductData::saveProductOptions(), который вызывается во время сохранения товара.
                Само интересно, что этим способом он сохраняет в таблицу, но именно потом сменить значение на получиться. Т.е. первая запись пройдет успешно но поменять или удалить уже не получится            
                    
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.