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<?php
namespace Clases;
use \Model\RolModel;
class Rol
{
private $id;
private $nombre;
private $mod;
function getId() {
return $this->id;
}
function getNombre() {
return $this->nombre;
}
function setNombre($nombre) {
}
function __construct($xid, $xnombre) {
$this->id = $xid;
}
public function equals(Rol $obj) {
return $this->nombre == $obj->nombre;
}
public function save(){
$this->mod = new RolModel();
return ($this->id == 0) ? $this->mod->guardame($this) : $this->mod->modificame($this);
}
public function del(){
$this->mod = new RolModel();
return $this->mod->eliminame($this);
}
}
RolModel.php
Código PHP:
Ver original<?php
namespace Model;
use \PDO;
use \App\Model;
use \App\Session;
use \Clases\Rol;
class RolModel extends Model
{
function __construct() {
parent::__construct();
}
public function obtenerTodos(){
$sql="select * from roles";
$consulta = $this->getBD()->prepare($sql);
$consulta->execute();
foreach($consulta->fetchAll(PDO::FETCH_ASSOC) as $row){
$rol = new Rol($row['rolId'], $row['rolNombre']);
}
return $datos;
}
public function guardame($rol){
if($this->check($rol->getNombre())){
Session::set('msg', 'El rol ya existe');
return null;
}
$sql="insert into roles(rolNombre) values(?)";
$consulta = $this->getBD()->prepare($sql);
$consulta->execute(array($rol->getNombre())); return ($consulta->rowCount() > 0) ? $this->getBD()->lastInsertId() : null;
}
public function modificame($rol){
$aux = $this->obtenerPorId($rol->getId());
if(!$rol->equals($aux)){
if($this->check($rol->getNombre())){
Session::set('msg', 'El rol ya existe');
return null;
}
}
$sql="update roles set rolNombre=? where rolId=?";
$consulta = $this->getBD()->prepare($sql);
$consulta->execute(array($rol->getNombre(),$rol->getId())); return ($consulta->rowCount() > 0) ? $rol->getId() : null;
}
private function check($unique) {
$query = 'SELECT rolId FROM roles WHERE rolNombre = ?';
$consulta = $this->getBD()->prepare($query);
$consulta->execute([$unique]);
// Indicar si hay algo en la base de datos con este nombre
return $consulta->rowCount() > 0;
}
public function eliminame($rol, $notUsed = true) {
$sql = "DELETE FROM roles WHERE rolId = ?";
if ($notUsed === true) {
$sql .= ' AND rolId NOT IN (SELECT DISTINCT rolId FROM usuarios)';
}
$consulta = $this->getBD()->prepare($sql);
$consulta->execute(array($rol->getId())); return ($consulta->rowCount() > 0) ? $rol->getId() : null;
}
public function obtenerPorId($id) {
$consulta = $this->getBD()->prepare("SELECT * FROM roles WHERE rolId = ?");
$consulta->execute(array($id)); if($consulta->rowCount() > 0) {
$res= $consulta->fetchAll(PDO::FETCH_ASSOC)[0];
return new Rol($res['rolId'], $res['rolNombre']);
}
else {
return null;
}
}
}
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.