Eliminar registros en CodeIgniter 4

Video thumbnail

La siguiente operación CRUD que vamos a ver, sería la que nos permite eliminar un registro de nuestra base de datos que puedes implementar en el listado paginado en CodeIgniter 4, a esto le podemos implementar alguna función de modal, cómo hacernos en nuestro Curso para dar los primeros pasos en CodeIgniter 4.

Esta entrada vamos a ver un ejemplo sencillo que sería eliminar el registro  directamente sin un modal; para eso, vamos a definir la siguiente función dentro de nuestro controlador que creamos anteriormente:

    public function delete($id = NULL)
    {
 
        $movie = new MovieModel();
 
        if ($movie->find($id) == NULL) {
            throw PageNotFoundException::forPageNotFound();
        }
 
        $movie->delete($id);
 
        return redirect()->to('/movie')->with('message', 'Película eliminada con éxito.');
    }

Borrar un elemento

Finalmente, para borrar un elemento, solamente necesitamos un identificador y la petición de tipo DELETE; aquí pasa lo mismo con el caso de las peticiones PUT y PATCH, no son soportadas por el API de HTML, así que, en vez de esto:

$routes->delete('película/(:num)','Pelicula::update/$1');

Usaremos esto:

$routes->post('película/delete/(:num)','Pelicula::delete/$1');

Ya con esto presentamos el esquema de las distintas funciones que podemos emplear para definir nuestras rutas para cada uno de los tipos de peticiones más utilizados; por supuesto que todavía falta conocer cómo se manejan las rutas juntos con los controladores, pero esto lo veremos más adelante.

Rutas de tipo recurso

Como es común emplea procesos CRUD para todos, en CodeIgniter tenemos un tipo de función que nos permite unificar estas siete rutas que vimos anteriormente en un solo proceso y se conocen como rutas de tipo recurso:

$routes->resource('pelicula');

Esa ruta, es exactamente lo mismo que definamos las rutas de la siguiente manera:

//crear
$routes->get('pelicula/new','Pelicula::new');
$routes->post('pelicula/create','Pelicula::create');
// ver
$routes->get('pelicula','Pelicula::index');
$routes->get('pelicula/(:num)','Pelicula::show/$1');
// actualizar
$routes->get('pelicula/(:num)/edit','Pelicula::edit/$1');
$routes->put('pelicula/(:num)','Pelicula::update/$1');
// eliminar
$routes->delete('pelicula/(:num)','Pelicula::delete/$1');

Con esto, como puedes apreciar si ejecutas un comando de spark:

$ php spark routes

php spark routes con rutas manuales

Aunque fíjate que aparecen las peticiones de tipo PUT, PATCH y DELETE que no necesitamos o mejor dicho, que no podemos emplear; las rutas de tipo recurso están pensadas para trabajar con una Api Rest y no con formularios; para los formularios empleamos las de tipo presenter:

$routes->presenter('pelicula');

Si mostramos las rutas ahora:

php spark routes

Verás que coinciden perfectamente con la estructura que creamos anteriormente; en definitiva, para los CRUDs, en vez de usar:

// crear
$routes->get('pelicula/new','Pelicula::new');
$routes->post('pelicula/create','Pelicula::create');
// ver
$routes->get('pelicula','Pelicula::index');
$routes->get('pelicula/(:num)','Pelicula::show/$1');
// actualizar
$routes->get('pelicula/(:num)/edit','Pelicula::edit/$1');
$routes->post('pelicula/update/(:num)','Pelicula::update/$1');
// eliminar
$routes->post('pelicula/delete/(:num)','Pelicula::delete/$1');

Usamos:

$routes->presenter('pelicula');

Importante notar que la ruta 'pelicula' en las rutas presenter y resource se usa tanto como el nombre del controlador (Pelicula.php) como para crear la ruta.

Vista

Es una función muy sencilla la verdad, lo importante aquí es referencial el elementos que queremos eliminar, para eso hacemos algunas validaciones previas para saber si el registro existe, y si no existe devolver un página 404 para finalmente mandar a alguna otra página, por ejemplo, la de listado, y para eso hacemos una redirección a la vista correspondiente. 

Luego, para llamar a la misma, podemos crear un enlace:

<a class="btn btn-danger btn-sm float-right" href="<?= route_to('store_movie_show', $m->id) ?>"><i class="fa fa-eye"></i> Ver</a>

Siguiente paso, aprende a definir tus rutas en CodeIgniter 4.

Vamos a ver como podemos eliminar registros de la base de datos empleando CodeIgniter 4.

Acepto recibir anuncios de interes sobre este Blog.

Andrés Cruz

EN In english