Метод ->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(), который вызывается во время сохранения товара.
Само интересно, что этим способом он сохраняет в таблицу, но именно потом сменить значение на получиться. Т.е. первая запись пройдет успешно но поменять или удалить уже не получится
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.