Example #1
0
 /**
  * Retorna uma query SQL para a operação UPDATE. Utiliza para isso os
  * atributos da instância CoreExt_Entity, usando o atributo identidade
  * para especificar qual registro atualizar na tabela.
  *
  * Uma query gerada por esse método segue a forma:
  * <code>
  * UPDATE [schema.]table SET column='value' WHERE id = 'idValue';
  * </code>
  *
  * @param CoreExt_Entity $instance
  * @return string
  */
 protected function _getUpdateStatment(CoreExt_Entity $instance)
 {
     $sql = 'UPDATE %s SET %s WHERE %s';
     $data = $this->_getDbAdapter()->formatValues($instance->toDataArray());
     // Remove o campo identidade e campos não-persistentes
     $data = $this->_cleanData($data);
     // Trata os valores NULL diferentemente dos outros, para evitar erro
     // de execução query
     $columns = array();
     foreach ($data as $key => $value) {
         $columnName = $this->_getTableColumn($key);
         if (is_null($value)) {
             $value = "NULL";
             $replaceString = "%s = %s";
         } else {
             $replaceString = "%s = '%s'";
         }
         $columns[] = sprintf($replaceString, $columnName, $value);
     }
     $where = array();
     foreach ($this->_primaryKey as $pk) {
         $whereName = $this->_getTableColumn($pk);
         $where[] = sprintf("%s = '%d'", $whereName, $instance->get($pk));
     }
     return sprintf($sql, $this->_getTableName(), implode(', ', $columns), implode(' AND ', $where));
 }