En este capítulo veremos como eliminar registros de nuestra base de datos, para ello dentro de nuestro archivo Model.php vamos a definir un nuevo método al que le vamos a llamar delete(). Este método lo que va a esperar recibir es un id para saber que registro ha de eliminar. Dejamos la sintaxis del archivo Model.php a continuación.
Models/Model.php
<?php
namespace App\Models;
use mysqli;
class Model
{
// Propiedades que recogen los datos de acceso a la BBDD
protected $db_host = DB_HOST;
protected $db_user = DB_USER;
protected $db_pass = DB_PASS;
protected $db_name = DB_NAME;
// Propiedad que recoge la conexión a la base de datos
protected $connection;
// Propiedad que recoge la consulta a la BBDD
protected $query;
public function __construct(){
$this->connection();
}
// Método encargado de realizar la conexión
public function connection(){
// Conexión con mysqli
$this->connection = new mysqli($this->db_host, $this->db_user, $this->db_pass, $this->db_name);
if($this->connection->connect_error)
{
die('Error de conexión: ' . $this->connection->connect_error);
}
}
// Método que hace la consulta a la base de datos
public function query($sql){
$this->query = $this->connection->query($sql);
return $this;
}
// Método que recupera el primer registro de la consulta a la base de datos
public function first(){
return $this->query->fetch_assoc();
}
// Método que recupera todos los registros de la consulta a la base de datos
public function get(){
return $this->query->fetch_all(MYSQLI_ASSOC);
}
// Consultas
// Método que nos devolverá todos los registros de una determinada tabla
public function all(){
$sql = "SELECT * FROM {$this->table}";
return $this->query($sql)->get();
}
// Recuperar determinado registro por su id
public function find($id){
// SELECT * FROM contacts WHERE id = 1
$sql = "SELECT * FROM {$this->table} WHERE id = {$id}";
return $this->query($sql)->first();
}
// Método para filtrar registros
public function where($column, $operator, $value = null){
if($value == null){
$value = $operator;
$operator = '=';
}
// SELECT * FROM contacts WHERE name = 'Francisco'
$sql = "SELECT * FROM {$this->table} WHERE {$column} {$operator} '{$value}'";
$this->query($sql);
return $this;
}
// Método para agregar registros
public function create($data){
// INSERT INTO contacts (name, email, phone) VALUES ('Francisco', This email address is being protected from spambots. You need JavaScript enabled to view it. ', '987654321')
$columns = array_keys($data);
$columns = implode(', ', $columns);
$values = array_values($data);
$values = "'" . implode("', '", $values) . "'";
$sql = "INSERT INTO {$this->table} ({$columns}) VALUES ({$values})";
$this->query($sql);
$insert_id = $this->connection->insert_id;
return $this->find($insert_id);
}
public function delete($id){
// DELETE FROM contacts WHERE id = 1
$sql = "DELETE FROM {$this->table} WHERE id = {$id}";
// EJECUTAMOS LA CONSULTA
// NO ES NECESARIO NADA MÁS, NO NECESITAMOS QUE RETORNE NADA
$this->query($sql);
}
}
Y modificamos el archivo HomeController.php
Controllers/HomeController.php
<?php
namespace App\Controllers;
use App\Models\Contact;
class HomeController extends Controller
{
public function index()
{
$contactModel = new Contact();
// Le decimos al modelo que haga la siguiente consulta
// return $contactModel->create([
// 'name' => 'Eva Paredes',
// 'email' => This email address is being protected from spambots. You need JavaScript enabled to view it. ',
// 'phone' => '123456789'
// ]);
// ELIMINAMOS EL id 2
$contactModel->delete(2);
return "Eliminado";
// Método que se encarga de incluir toda la lógica necesaria para mostrar contenido
return $this->view('home', [
'title' => 'Home',
'description' => 'Esta es la página Home'
]);
}
}
Una de las ventajas que tenemos al crear un modelo por cada tabla que queremos conectarnos es que, no sólo vamos a definir la tabla a la cual queremos conectarnos, sino que debemos conectarnos a una tabla de una base de datos diferente.