Open erickjosue8916 opened 3 years ago
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
Definicion
La clase que representa al modelo debe heredar de la clase MySqlConnection, teniendo acceso a la propiedad heredada $db, la cual contiene la conexion con la base de datos
Se deben colocar las propiedades, equivalentes a la tabla a la que hace referencia el modelo en la base datos, asi como sus getters y setters