Ver Mensaje Individual
  #1 (permalink)  
Antiguo 15/03/2018, 17:24
stevens82
 
Fecha de Ingreso: octubre-2011
Mensajes: 132
Antigüedad: 13 años, 1 mes
Puntos: 4
ejecutar una funcion dentro de otra

Hola a todos, no se si el titulo va a corde con lo que necesito pero espero explicarme bien, estoy ingresando a dos tablas relacionadas ciertos registros, pero en la segunda tabla se pueden ingresar 1, 2, 3 o mas registros a la ves, aca un ejemplo de lo que tengo me funciona pero en dos funciones diferentes sin ningun problema:

en mi controlador tengo esto
Código PHP:
Ver original
  1. public funcion nuevo()
  2. {
  3. //codigo ...
  4.  
  5. $fecha_enc = date('Y-m-d', strtotime($_POST['fecha_enc']));
  6.  
  7.             $this->_encuestas->registrarEncuesta(
  8.             $this->getPostParam('titulo'),
  9.             $this->getPostParam('cargo'),
  10.             $this->getPostParam('departamento'),
  11.             $this->getPostParam('provincia'),
  12.             $this->getPostParam('distrito'),
  13.             $fecha_enc);
  14.  
  15.             $num = count($this->_encuestas->getCandidatosCount());
  16.             // var_dump($num);
  17.              for ($i=0; $i<$num; $i++) {
  18.                 $this->_encuestas->insertOpcionesEncuesta(
  19.                     $_POST['candidato'][$i]
  20.                 );
  21.             }
  22. }

y en el modelo:

Código PHP:
Ver original
  1. public function registrarEncuesta($titulo, $cargo, $departamento, $provincia, $distrito, $fecha_enc)
  2.     {
  3.         $this->_db->prepare("INSERT INTO encuestas (id, titulo, id_cargo, id_pais, id_departamento, id_provincia, id_distrito, fecha_encuesta, fecha_registro, usuario_registrador) VALUES (null, :titulo, :cargo, 1, :departamento, :provincia, :distrito, :fecha_enc, now(), '" . Session::get('id_usuario') . "')"
  4.         )->execute(array(
  5.             ':titulo'           => $titulo,
  6.             ':cargo'            => $cargo,
  7.             ':departamento'     => $departamento,
  8.             ':provincia'        => $provincia,
  9.             ':distrito'         => $distrito,
  10.             ':fecha_enc'        => $fecha_enc)
  11.         );
  12.  
  13.     public function insertOpcionesEncuesta($id_candidato){
  14.         $sql = "SELECT MAX(id) AS id FROM encuestas LIMIT 1";
  15.         $query = $this->_db->prepare($sql);
  16.         $query->execute();
  17.         $row = $query->fetch();
  18.         $sql = "INSERT INTO opciones (id, id_encuesta, id_candidato) VALUES (null, :id_encuesta, :id_candidato)";
  19.         $statement = $this->_db->prepare($sql);
  20.         $statement->execute(array(
  21.             ':id_encuesta'   => $row['id'],
  22.             ':id_candidato'  => $id_candidato
  23.         ));
  24.     }

con esto me funciona perfecto pero que pasa si no registra la primera funcion la segfunda me ingresaria con el id del ultimo registro de la primera tabla ya registrada antes, por lo que necesito saber como ejecutar la segunda consulta si y solo si la primera se ejecuto correctamente, esto meterlo talvez en una TRANSACCION, espero alguien me peuda dar una ayuda al respecto.