protected function _save() { if (empty($this->_metadata)) { return true; } foreach ($this->_metadata as $key => $metadata) { $metadata = $this->_parseMetadata($metadata); if ($this->_model->primary() !== $this->_model->primaryWas()) { $metadata['class']::updateAll(array($metadata['foreign_key'] => $this->_model->primary()), array($metadata['foreign_key'] => $this->_model->primaryWas())); } if (!isset($this->_records[$key]) || !$this->_records[$key] instanceof ModelIterator) { continue; } $modelIterator = new ModelIterator(array(), $metadata['class']); foreach ($this->_records[$key] as $record) { $record->{$metadata}['foreign_key'] = $this->_model->primary(); if ($record->isNewRecord()) { $modelIterator->append($metadata['class']::create($record->toArray())); } else { $metadata['class']::updateAll(array($metadata['foreign_key'] => $this->_model->primary()), array($metadata['class']::$primaryKey => $record->primaryWas())); $modelIterator->append($metadata['class']::first(array('conditions' => array($metadata['class']::$primaryKey => $record->primaryWas())))); } } $this->_records[$key] = $modelIterator; } return true; }