protected function _saveDecorators($row, $decorators) { // delete the old $gpdTable = new EngineBlock_Model_DbTable_GroupProviderDecorator(); $gpdoTable = new EngineBlock_Model_DbTable_GroupProviderDecoratorOption(); $gpdOld = $gpdTable->fetchAll($gpdTable->select("id")->where("group_provider_id = '{$row['id']}'")); try { // delete the old foreach ($gpdOld as $old) { $old->delete(); // cascade delete for options } // insert the new foreach ($decorators as $d) { // separate options $gpdoData = $d['options']; unset($d['options']); // insert decorator row $gpdRow = $gpdTable->createRow(); $gpdRow->setFromArray($d); $gpdId = $gpdRow->save(); // insert related options if (is_array($gpdoData)) { foreach ($gpdoData as $o) { $gpdoRow = $gpdoTable->createRow(); $gpdoRow->setFromArray($o); $gpdoRow->group_provider_decorator_id = $gpdId; $gpdoRow->save(); } } } } catch (Exception $ex) { // TODO: handle exception throw $ex; } }