/** * Função que monta os dados para pesquisa * @param ValueObjectAbstract $valueObject */ protected function _preparePersist(ValueObjectAbstract $valueObject) { $arrVo = $valueObject->toArray(); $attrs = (array) $valueObject->annotation()->load()->attrs; foreach ($arrVo as $key => $elmnt) { if (isset($attrs[$key]->database)) { if ('string' == $attrs[$key]->type && NULL != $elmnt) { $elmnt = '%' . $elmnt . '%'; } $this->_params[$key] = (object) array('type' => $attrs[$key]->type, 'value' => '' == $elmnt ? NULL : $elmnt); } } }
/** * Varre o VO buscando as dependencias de outras tabelas * @param ValueObjectAbstract $valueObject * @return array[] */ public function keepUpdateData(ValueObjectAbstract $valueObject) { $tmpData = array_filter($valueObject->toArray()); foreach ($tmpData as $value => $key) { if (is_array($key)) { if (empty($tmpData[$value][$value])) { unset($tmpData[$value]); } else { $tmpData[$value] = $tmpData[$value][$value]; } } } return $tmpData; }
/** * Função que monta os dados para pesquisa * @param ValueObjectAbstract $valueObject */ private function _preparePersist(ValueObjectAbstract $valueObject) { $arrResult = array(); $arrVo = array_filter($valueObject->toArray()); $attrs = (array) $valueObject->annotation()->load()->attrs; foreach ($arrVo as $key => $elmnt) { $arrResult[$key] = (object) array('type' => $attrs[$key]->type, 'value' => $elmnt); } return $arrResult; }
/** * copia o conteudo, dos atributos avaliados como vazio do objeto atual, do valueObjet informado * * Nota: Este metodo só funciona com objetos de mesmo tipo * * @param ValueObjectAbstract $source * @return ValueObjectAbstract * */ public function copySaveObjectData(self $source) { $ttype = $this->annotation(); $tdata = $this->toArray(); $sdata = $source->toArray(); ValueObjectException::throwsExceptionIfParamIsNull($source->annotation()->getClassName() == $ttype->getClassName(), self::T_VALUEOBJECT_OPERATION_REQUIRE_SOME_OBJECT); # copia os dados da origem para destino foreach ($ttype->getAttrsDoc() as $attr) { $name = $attr['name']; $setter = $attr['set']; # quando o valor for um array isso indica uma chave estrangeira, assim, pega-se a # mesma chave e busca no array. if (is_array($sdata[$name])) { $sdata[$name] = isset($attr['foreingKeyAlias']) ? $sdata[$name][$attr['foreingKeyAlias']] : $sdata[$name][$name]; } # se attr local estiver vazio entao preenche-o com o # dado do valueObject informado if (is_array($tdata[$name])) { $tdata[$name] = isset($attr['foreingKeyAlias']) ? $tdata[$name][$attr['foreingKeyAlias']] : ($tdata[$name] = $tdata[$name][$name]); } # preenche o attr deste VO se o attr estiver vazio if ('boolean' != gettype($tdata[$name]) && '' == $tdata[$name] || 'boolean' != gettype($tdata[$name]) && FALSE === $tdata[$name]) { $this->{$setter}($sdata[$name]); } } return $this; }