Ver Mensaje Individual
  #5 (permalink)  
Antiguo 07/09/2010, 08:37
Avatar de DooBie
DooBie
 
Fecha de Ingreso: septiembre-2004
Mensajes: 1.101
Antigüedad: 19 años, 8 meses
Puntos: 71
Respuesta: Zend Framework - DbTable - update

Cita:
Iniciado por Genetix Ver Mensaje
cual es el mensaje de error que te muestra ?
Tal y como lo tengo ahora, con mi código, ninguno, con el tuyo me muestra este:
Cita:

An error occurred
Application error
Exception information:

Message: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Array' in 'where clause'
Stack trace:

#0 /home/ivan/Dropbox/www/ZendFramework-1.10.7/library/Zend/Db/Statement.php(300): Zend_Db_Statement_Pdo->_execute(Array)
#1 /home/ivan/Dropbox/www/ZendFramework-1.10.7/library/Zend/Db/Adapter/Abstract.php(468): Zend_Db_Statement->execute(Array)
#2 /home/ivan/Dropbox/www/ZendFramework-1.10.7/library/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query('UPDATE `tbl_cat...', Array)
#3 /home/ivan/Dropbox/www/ZendFramework-1.10.7/library/Zend/Db/Adapter/Abstract.php(604): Zend_Db_Adapter_Pdo_Abstract->query('UPDATE `tbl_cat...', Array)
#4 /home/ivan/Dropbox/www/ZendFramework-1.10.7/library/Zend/Db/Table/Abstract.php(1109): Zend_Db_Adapter_Abstract->update('tbl_categories', Array, 'Array = 5')
#5 /home/ivan/Dropbox/www/staticsGP/staticsGP/models/DbTable/Categories.php(45): Zend_Db_Table_Abstract->update(Array, 'Array = 5')
#6 /home/ivan/Dropbox/www/staticsGP/staticsGP/controllers/CategoriesController.php(109): Application_Model_DbTable_Categories->updateCategory(Array, 5)
#7 /home/ivan/Dropbox/www/ZendFramework-1.10.7/library/Zend/Controller/Action.php(513): CategoriesController->editAction()
#8 /home/ivan/Dropbox/www/ZendFramework-1.10.7/library/Zend/Controller/Dispatcher/Standard.php(295): Zend_Controller_Action->dispatch('editAction')
#9 /home/ivan/Dropbox/www/ZendFramework-1.10.7/library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#10 /home/ivan/Dropbox/www/ZendFramework-1.10.7/library/Zend/Application/Bootstrap/Bootstrap.php(97): Zend_Controller_Front->dispatch()
#11 /home/ivan/Dropbox/www/ZendFramework-1.10.7/library/Zend/Application.php(366): Zend_Application_Bootstrap_Bootstrap->run()
#12 /home/ivan/Dropbox/www/staticsGP/index.php(51): Zend_Application->run()
#13 {main}

Request Parameters:

array (
'controller' => 'categories',
'action' => 'edit',
'id' => '5',
'module' => 'default',
'id_category' => '5',
'name_category' => 'afvqafq',
'description_category' => 'sdgxzb',
'submit' => 'Editar',
)
Y aquí el código completo, el mio:
Código PHP:
class Application_Model_DbTable_Categories extends Zend_Db_Table_Abstract
{
    
// Nombre de la tabla
    
protected $_name 'tbl_categories';
    
    
// Nombre del campo primario de la tabla $_name.
    
protected $_primary 'id_category';

    public function 
getCategory($id)
    {
      
// Buscamos el id de la categoria dada
      
$row $this->fetchRow($this->_primary ' = '. (int)$id);
      
      
// si no la encontramos, devolvemos null
      
if (!$row) return null;
      
      
// Si la encontramos, devolvemos un array
      
return $row->toArray();
    }
    
    public function 
addCategory($data)
    {
      
// Si hemos enviado un array para los datos, los insertamos.
      
if (is_array($data)) {

        
// La categoria existe, no podemos continuar.
        
if ($this->_getCategoryByName($data['name_category'])) return ROW_EXISTS;

        
// Devolvemos el id de la fila insertada.
        
return $this->insert($data);
      }
    }
    
    public function 
updateCategory($data$id)
    {
      
// Si hemos enviado un array con los datos necesarios, hacemos el update.
      
if (is_array($data))
        
// Devolvemos el numero de filas afectadas
        /* NOTA: Por alguna razon que desconozco, aqui, $this->_primary es
         * convertido a un array, con lo que debo usarlo como tal para que
         * no me de ningun error al ejecutar el update.
         */
        
return $this->update($data$this->_primary[1] . ' = ' . (int)$id);
    }
    
    public function 
deleteCategory($id)
    {
      
// Eliminamos la fila segun el id dado, devolvemos el numero de filas eliminadas.
      
return $this->delete($this->_primary ' = ' . (int)$id);
    }
    
    public function 
getAllCategories()
    {
      
// Recogemos todas las filas
      
$row $this->fetchAll();
      
      
// Si no hay filas, devolvemos null
      
if (!$row) return null
      
      
// Si hay filas, las devolvemos como un objeto.
      
return $row;
    }
    
    private function 
_getCategoryByName($name_category '') {
      
// buscamos una categoria por el nombre
      
$row $this->fetchRow("name_category = '" $name_category "'");
      
// Si encontramos la categoria que buscamos, devuelve true, sino false.
      
return ($row) ? true false;
    }


Entiende perfectamente el error que me da, lo que no entiendo el comportamiento, nose si me explico, si ves el código completo, quizas veas la diferencia que debo de poner, y no entiendo el porque.

Saludos.