Ver Mensaje Individual
  #12 (permalink)  
Antiguo 11/01/2016, 12:08
Avatar de detective_jd
detective_jd
 
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años
Puntos: 6
Respuesta: Evitar eliminar registros con php

Hola x_atrix, digamos que en Rol tengo los atributos de la clase en sí, pero en RolModel tengo lo necesario para persistir los datos del rol

Rol.php

Código PHP:
Ver original
  1. <?php
  2. namespace Clases;
  3. use \Model\RolModel;
  4. class Rol
  5. {
  6.     private $id;
  7.     private $nombre;
  8.     private $mod;
  9.     function getId() {
  10.         return $this->id;
  11.     }
  12.     function getNombre() {
  13.         return $this->nombre;
  14.     }    
  15.     function setNombre($nombre) {
  16.         $this->nombre = strtoupper($nombre);
  17.     }
  18.     function __construct($xid, $xnombre) {
  19.         $this->id = $xid;
  20.         $this->nombre = strtoupper($xnombre);
  21.     }
  22.     public function equals(Rol $obj) {
  23.         return $this->nombre == $obj->nombre;                
  24.     }
  25.     public function save(){
  26.         $this->mod = new RolModel();
  27.         return ($this->id == 0) ? $this->mod->guardame($this) : $this->mod->modificame($this);
  28.     }
  29.     public function del(){
  30.         $this->mod = new RolModel();
  31.         return $this->mod->eliminame($this);
  32.     }
  33. }

RolModel.php

Código PHP:
Ver original
  1. <?php
  2. namespace Model;
  3. use \PDO;
  4. use \App\Model;
  5. use \App\Session;
  6. use \Clases\Rol;
  7. class RolModel extends Model
  8. {
  9.     function __construct() {
  10.         parent::__construct();
  11.     }
  12.     public function obtenerTodos(){
  13.         $sql="select * from roles";
  14.         $datos= array();
  15.         $consulta = $this->getBD()->prepare($sql);
  16.         $consulta->execute();
  17.         foreach($consulta->fetchAll(PDO::FETCH_ASSOC) as $row){
  18.             $rol = new Rol($row['rolId'], $row['rolNombre']);
  19.             array_push($datos, $rol);
  20.         }
  21.         return $datos;
  22.     }
  23.     public function guardame($rol){
  24.         if($this->check($rol->getNombre())){
  25.             Session::set('msg', 'El rol ya existe');
  26.             return null;
  27.         }
  28.         $sql="insert into roles(rolNombre) values(?)";
  29.         $consulta = $this->getBD()->prepare($sql);
  30.         $consulta->execute(array($rol->getNombre()));
  31.         return ($consulta->rowCount() > 0) ? $this->getBD()->lastInsertId() : null;
  32.     }
  33.     public function modificame($rol){
  34.         $aux = $this->obtenerPorId($rol->getId());
  35.         if(!$rol->equals($aux)){
  36.             if($this->check($rol->getNombre())){
  37.                 Session::set('msg', 'El rol ya existe');
  38.                 return null;
  39.             }        
  40.         }
  41.         $sql="update roles set rolNombre=? where rolId=?";
  42.         $consulta = $this->getBD()->prepare($sql);
  43.         $consulta->execute(array($rol->getNombre(),$rol->getId()));
  44.         return ($consulta->rowCount() > 0) ? $rol->getId() : null;
  45.     }
  46.     private function check($unique) {
  47.         $query = 'SELECT rolId FROM roles WHERE rolNombre = ?';
  48.         $consulta = $this->getBD()->prepare($query);
  49.         $consulta->execute([$unique]);
  50.         // Indicar si hay algo en la base de datos con este nombre
  51.         return $consulta->rowCount() > 0;
  52.     }
  53.     public function eliminame($rol, $notUsed = true) {
  54.         $sql = "DELETE FROM roles WHERE rolId = ?";
  55.         if ($notUsed === true) {
  56.             $sql .= ' AND rolId NOT IN (SELECT DISTINCT rolId FROM usuarios)';
  57.         }
  58.         $consulta = $this->getBD()->prepare($sql);
  59.         $consulta->execute(array($rol->getId()));
  60.         return ($consulta->rowCount() > 0) ? $rol->getId() : null;
  61.     }
  62.     public function obtenerPorId($id) {
  63.         $consulta = $this->getBD()->prepare("SELECT * FROM roles WHERE rolId = ?");
  64.         $consulta->execute(array($id));
  65.         if($consulta->rowCount() > 0) {
  66.             $res= $consulta->fetchAll(PDO::FETCH_ASSOC)[0];
  67.             return new Rol($res['rolId'], $res['rolNombre']);
  68.         }
  69.         else {
  70.             return null;
  71.         }
  72.     }
  73. }

lo que no entiendo es porque en el constructor dónde le paso los parámetros del rol, no puedo instanciar el modelo y deja de funcionar parte del sistema??

Espero respuestas y saludos.