En capítulos pasados habíamos creado un modelo en el cual nos conectábamos a una base de datos, establecíamos consultas a dicha base de datos y recuperábamos la información de la consulta de la base de datos, ya sea un único registro o un conjunto de registros.
También habíamos especificado que por cada tabla que tuviéramos en nuestra base de datos íbamos a crear un nuevo modelo, por ejm el modelo Contact.php se iba a encargar de conectarse con una tabla denominada contacts. Si tuviésemos una tabla denominada users crearíamos un modelo llamado User.php.
Como vamos a crear varios modelos, sería algo complicado definir todo lo que hemos definido en Contact.php para cada uno de los modelos que tengamos que crear. Para evitar tener que estar escribiendo nuevamente todo, lo que vamos a hacer es crear un modelo base para todos los modelos que vayamos a crear, a dicho modelo le vamos a llamar Model.php. Todos los modelos que creemos se van a extender de dicho modelo.
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;
}
}
También vamos a modificar el archivo Contacts.php.
Models/Contact.php
<?php
namespace App\Models;
class Contact extends Model
{
protected $table = 'contacts';
}
Y también vamos a modificar 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->where('id', '>', 1)->get();
// 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'
]);
}
}
A lo largo de este capítulo hemos visto como podemos extraer de manera rápida información de nuestra base de datos.