19/03/2018, 13:26
|
| Colaborador | | Fecha de Ingreso: junio-2013 Ubicación: México
Mensajes: 2.995
Antigüedad: 11 años, 4 meses Puntos: 379 | |
Respuesta: ejecutar una funcion dentro de otra Cita:
Iniciado por stevens82 Gracias por tus respuestas, modifique el codigo asi:
Controller: Código PHP: $fecha_enc = date('Y-m-d', strtotime($_POST['fecha_enc']));
$candidato = $_POST['candidato'];
$this->_encuestas->registrarEncuesta(
$this->getPostParam('titulo'),
$this->getPostParam('cargo'),
$this->getPostParam('departamento'),
$this->getPostParam('provincia'),
$this->getPostParam('distrito'),
$fecha_enc,
$candidato);
y en el model: Código PHP: public function registrarEncuesta($titulo, $cargo, $departamento, $provincia, $distrito, $fecha_enc, array $id_candidato)
{
try {
$this->_db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->_db->beginTransaction(); // iniciar transacción
$a = $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') . "')"
)->execute(array(
':titulo' => $titulo,
':cargo' => $cargo,
':departamento' => $departamento,
':provincia' => $provincia,
':distrito' => $distrito,
':fecha_enc' => $fecha_enc)
);
$lastReciboId = $this->_db->lastInsertId();
if (!$a) {
throw new Exception("ERROR AL INGRESAR LOS DATOS");
} else {
for ($i=0; $i<count($id_candidato); $i++) {
$sql = "INSERT INTO opciones (id, id_encuesta, id_candidato) VALUES (null, :id_encuesta, :id_candidato)";
$b = $statement = $this->_db->prepare($sql);
$statement->execute(array(
':id_candidato' => $id_candidato[$i],
':id_encuesta' => $lastReciboId
));
}
if($a && $b) {
$this->_db->commit();
} else {
$this->_db->rollBack();
}
}
// echo 'Datos insertados correctamente';
} catch (PDOException $e) {
// si ocurre un error hacemos rollback para anular todos los insert
$this->_db->rollBack();
throw $e;
// echo $e->getMessage();
}
}
Ahra hare el editar, gracias No era necesario complicar tu códifgo como lo hiciste para capturar excepciones.
Tu código original estaba bien, solo tienes que capturar una excepción mas general porque solo esperas que falle los insert y pueden suceder otras cosas.
agrega un catch adicional para que captures un Exception y debe de funcionar sin necesidad de usar condiciones
Código PHP:
Ver originalpublic function registrarEncuesta($titulo, $cargo, $departamento, $provincia, $distrito, $fecha_enc, $id_candidato) { try { $this->_db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $this->_db->beginTransaction(); $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') . "')" ':titulo' => $titulo, ':cargo' => $cargo, ':departamento' => $departamento, ':provincia' => $provincia, ':distrito' => $distrito, ':fecha_enc' => $fecha_enc) ); $lastReciboId = $this->_db->lastInsertId(); for ($i=0; $i<count($id_candidato); $i++) { $sql = "INSERT INTO opciones (id, id_encuesta, id_candidato) VALUES (null, :id_encuesta, :id_candidato)"; $statement = $this->_db->prepare($sql); $statement->execute(array( ':id_candidato' => $id_candidato[$i], ':id_encuesta' => $lastReciboId )); } $this->_db->commit(); echo 'Datos insertados'; } catch (PDOException $e) { // si ocurre un error hacemos rollback para anular todos los insert $this->_db->rollBack(); echo $e->getMessage(); } catch (Exception $e) { //si sucede otra cosa inesperada $this->_db_rollbak() //aqui puedes mandar a un log el mensaje de error $e->getMessage() } }
__________________ Saludos About me Laraveles
A class should have only one reason to change. |