Steve-Hndz / UFront-End

Repositorio donde se trabajará todo el Front-End del Proyecto para TPI
0 stars 0 forks source link

Modelos #18

Open erickjosue8916 opened 3 years ago

erickjosue8916 commented 3 years ago

Definicion

// Ejemplo
private $name;

public getName() {return $this->name}
public setName($name) {$this->name = $name}

Los modelos se plantea con 5 metodos principales (se implementara una interfaz para que sea obligatorio)

erickjosue8916 commented 3 years ago

Metodo List

DE USARSE JOIN Y USAR ABREVIACION EN LAS TABLAS, COLOCAR UN LAS ABREVIACIONES EN TODOS LOS CASOS POSIBLES, Y SI SE COPIA ESTE TEMPLATE, Y NO SE USARAN BORRAR LAS ABREVIACIONES

Este método puede tener unas variantes pero en lo principal debe contar con los siguientes datos en la consulta

dato descripción
$sql tendra un string concatenado con la consulta a ejecutar
$this->createSqlFilter metodo dentro de la clase que permite generar el codigo sql para el filtrado, este metodo debe existir dentro de la clase
$this->createSort metodo dentro de la clase que permite generar el codigo sql para el filtrado, este metodo debe existir dentro de la clase
inners lineas opcionales dentro del metodo, usadas en caso que se desee agregar informacion desde otras tablas, en la consulta, se recomienda probar estas consultas en phpMyAdmin o equivalente
public function list($page = 1, $limit = 20, $filter = [], $sort = [])
  {

    $offset = ($page - 1) * $limit;
    $sql = "SELECT * FROM " . self::TABLE_NAME . " d"; // la letra d es solo una abreviasion del nombre de la tabla asi como en los demas abreviaciones de tabla
    $sql .= " INNER JOIN tbl_municipio m on m.id_municipio = d.id_municipio ";
    $sql .= " INNER JOIN tbl_departamento dp ON dp.id_departamento = d.id_departamento";
    $sql .= $this->createSqlFilter($filter);
    $sql .= $this->crateSqlSort($sort);
    $sql .= " limit " . $limit . " offset " . $offset;
    echo $sql . "<br>"; // pueden comentar usar esta linea solo en desarrollo para verificar el sql generado, para ver si esta bien

    $data = array();
    if ($result = $this->db->query($sql, MYSQLI_USE_RESULT)) {
      while ($obj = $result->fetch_object()) {
        array_push($data, $obj);
      }
    }
   return $data;
  }

Metodo CreateSqlFilter

Genera un string con el codigo Sql que se requerira para hacer un filtro, se debe generar un case para cada valor posible en el filtro, acorde al tipo de dato que representa el filtro, ejemplo si el filtro recibe un string, el operador debe ser un LIKE

dato descripcion
$filters arreglo de filtros contemplados
swicth un caso por cada elemento dentro de $filters
private function createSqlFilter($filter) {
    $sql = "";
    $filters = ['name', 'departamento', 'municipio']; // set available filters here
    if (count($filter)) {
      $i = 0;
      foreach ($filter as $key => $value) {
        $searchInFilters = array_search($key, $filters);
        if ($searchInFilters === false) $searchInFilters = -1;
        echo "<br>";
        if ($searchInFilters >= 0  ) {
          $sql .= ($i == 0 ) ? " WHERE " : " AND ";
          switch ($key) {
            case 'name':
              $sql .= "d.nombre_donante LIKE '%" . $value ."%'"; 
              break;
            case 'municipio':
              $sql .= "m.id_municipio = " . $value ." "; 
              break;
            case 'departamento':
              $sql .= "dp.id_departamento = " . $value ." "; 
              break;
          }
        }
        $i++;
      }
    }
    return $sql;
  }

Metodo CreateSqlSort

Genera un string con el codigo Sql que se requerira para hacer un ordenamiento, se debe generar un case para cada valor posible en el ordenamiento

dato descripcion
$filters arreglo de ordenes contemplados
swicth un caso por cada elemento dentro de $fields
private function crateSqlSort($rules) {
    $sql = "";
    $fields = ['id', 'municipio', 'departamento']; // set available filters here
    if (count($rules)) {
      $i = 0;
      foreach ($rules as $key => $value) {
        $searchInFilters = array_search($key, $fields);
        if ($searchInFilters === false) $searchInFilters = -1;
        echo "<br>";
        if ($searchInFilters >= 0  ) {
          $value = strtoupper($value);
          if ($value == 'ASC' || $value == 'DESC') $sql .= ($i == 0) ? " ORDER BY " : " , ";
          switch ($key) {
            case 'id':
              if ( $value == 'ASC' || $value == 'DESC' ) $sql .= " d.id_donante " . $value ." "; 
              break;
            case 'municipio':
              if ( $value == 'ASC' || $value == 'DESC' ) $sql .= " d.id_municipio " . $value ." "; 
              break;
            case 'departamento':
              if ( $value == 'ASC' || $value == 'DESC' ) $sql .= " d.id_departamento " . $value ." "; 
              break;

            default:
              # code...
              break;
          }
        }
        $i++;
      }
    }
    return $sql;
  }
erickjosue8916 commented 3 years ago

Metodo Create

data descripcion
$sql codigo sql para insertar un registro, el objeto sobre el cual se use ya debe tener las propiedades seteadas, preferentemente en el controlador
public function create()
  {
    $sql = "INSERT INTO " . self::TABLE_NAME . " (nombre_donante,apellido_donante,estado_donante,id_departamento,id_municipio,id_sangre,prueba_donante,telefono_donante,carnet,historial) VALUES 
    ('" . $this->getNombre_donante() . "','" . $this->apellido_donante . "','Created'," . $this->id_departamento . ","  . $this->id_municipio . "," . $this->id_sangre . ",'" . $this->prueba_donante . "','" . $this->telefono_donante . "','" . $this->carnet . "','" . $this->historial . "')";
    $result
    if (!$result = $this->db->query($sql)) {
      return "Falló la creación del registro: (" . $this->db->errno . ") " . $this->db->error;
    }
    return $result;
  }
erickjosue8916 commented 3 years ago

Metodo Get

data descripcion
$sql codigo sql para obtener un registro individual, el objeto sobre el cual se use ya debe tener las propiedad del id seteada, preferentemente en el controlador
  public function get()
  {
    $sql = "SELECT * FROM " . self::TABLE_NAME . " WHERE id_donante = " . $this->id_donante;
    echo $sql . "<br>";
    $data = array();
    if ($result = $this->db->query($sql, MYSQLI_USE_RESULT)) {
      $data = array();
      while ($obj = $result->fetch_object()) {
        array_push($data, $obj);
      }

    }
    return $data;
  }
erickjosue8916 commented 3 years ago

Metodo Update

data descripcion
$sql codigo sql para actualzar un registro, el objeto sobre el cual se use ya debe tener las propiedad del id y las que se actualizaran seteadas, preferentemente en el controlador
  public function update()
  {
    $sql = "UPDATE " . self::TABLE_NAME . " SET estado_donante = '" . $this->estado_donante . "' WHERE id_donante = " . $this->id_donante;
    echo $sql . "<br>";
    if (!$result = $this->db->query($sql)) {
      return "Falló la actualizacion del registro: (" . $this->db->errno . ") " . $this->db->error;
    }
    return $result;
  }