Ver Mensaje Individual
  #1 (permalink)  
Antiguo 16/08/2012, 18:07
Avatar de destor77
destor77
 
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 19 años, 6 meses
Puntos: 43
active table y claves foraneas

Buenas,
me hice un mini active table (siguiente el ejemplo del blog de gatorV), pero estoy teniendo problemas cuando la tabla tiene mas de una clave primaria.
Yo tengo un método que setea los campos de la tabla con los datos que se le pasan:
Código PHP:
Ver original
  1. public function setearCampos($data) {
  2.         $this->debug->info($this->fields);
  3.         $this->debug->log($data);
  4.         //Recorro el arreglo y lo asigno a los campos del registro
  5.         foreach ($data as $key => $value) {
  6.             //valido si existe la clave en el arreglo de los campos y lo asigno al campo
  7.             if (array_key_exists($key, $this->fields)) {
  8.                 $this->fields[$key] = htmlentities(stripslashes($value));
  9.             }
  10.             //valido si existe la clave primaria en el arreglo si no existe la seteo en vacio.
  11.             if (!array_key_exists($this->keyField, $data)) {
  12.                 $this->fields[$this->keyField] = '';
  13.             }
  14.         }
  15.  
  16.         //cambio el estado de la bandera seteados
  17.         $this->seteados = 1;
  18.     }
Despues tengo un método guardar que lo que hace es validar si viene un id o no si viene guarda los datos y sino los actualiza.
El problema lo tengo cuando hay una tabla asi:
Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `core_log_accesos` (
  2.   `id` int(11) NOT NULL AUTO_INCREMENT,
  3.   `username` int(11) NOT NULL,
  4.   `fecha` datetime DEFAULT NULL,
  5.   `ip` varchar(100) DEFAULT NULL,
  6.   PRIMARY KEY (`id`,`username`),
  7.   KEY `fk_core_log_accesos_core_users1` (`username`)
  8. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

mi código no logra determinar por cual clave primaria validar.
Hay forma de solucionar esto?
Desde ya muchas gracias!