/** * Deleta dados no repositório. * * @param ValueObjectAbstract $valueObject * @return br\gov\sial\core\persist\Persist * @throws PersistException * */ public function delete(ValueObjectAbstract $valueObject) { $annon = $valueObject->annotation()->load(); $tmpFilter = NULL; # tecnica explicada no metodo findByParam $tmpOperator = array('WHERE', 'AND'); foreach ($annon->attrs as $field) { if (!isset($field->database) || !isset($field->primaryKey)) { // @codeCoverageIgnoreStart continue; // @codeCoverageIgnoreEnd } $tmpFilter .= sprintf(' %1$s %2$s = :%2$s', $tmpOperator[(bool) $tmpFilter], $field->database); $params[$field->database] = self::_getValue($valueObject, $field->get, $field->type); } # por padrao nao eh possivel atualizar toda a entidade, se realmente for necessario realizar # esta operacao sobreescreve este metodo PersistException::throwsExceptionIfParamIsNull($tmpFilter, sprintf(self::PERSIST_UNAVAILABLE_DELETE_FILTER, $annon->entity)); $query = sprintf('DELETE FROM %s %s', $annon->entity, $tmpFilter); $this->_persist->getConnect()->prepare($query, $params)->update(); }