57. Eliminar registros de una BBDD MySQL con PHP

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.