En este capítulo crearemos un método que nos permita poder agregar nuevos registros a nuestra base de datos, para ello nos dirigimos al modelo base y vamos a crear un nuevo método que nos permita insertar registros. Para ello nos dirigimos al archivo Models/Model.php como hemos ido haciendo hasta ahora.
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);
}
}
Y también hemos modificado el archivo Controllers/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'
]);
// 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'
]);
}
}