Running migrations for Codeigniter 4 via HTTP

I did not have command line access on a few of the servers that hosted the projects I was working on. And currently Codeigniter 4 only has documentation on running database migrations / rollbacks / seeds in the command line.

Therefore I asked around and made a special controller for the migrations / rollbacks / seeding on those servers. Now I can run these database operations in the browser, by accessing the methods of that controller like this:

https://example.com/admintools/migrate

<?php

namespace App\Controllers;

use Exception;

class Admintools extends BaseController
{

    public function migrate()
    {
        // uncomment this after running migrations
        // exit;

        if (! service('ionAuth')->isAdmin()) {
            return;
        }
        // Load the migrations library
        $migrate = \Config\Services::migrations();

        try {
            // Run all available migrations
            $migrate->latest();

            // Alternatively, you can specify a specific version:
            // $migrate->version(3);

            echo 'Migrations were executed successfully.<br>';
        } catch (Exception $e) {
            echo 'Error: ' . $e->getMessage();
        }
    }


    public function seed()
    {
        // uncomment this after running seeds
        // exit;

        if (! service('ionAuth')->isAdmin()) {
            return;
        }

        $seeder = \Config\Database::seeder();

        try {
            echo 'Seeding Certificates...<br>';

            $seeder->call('CertificatesSeeder');
            echo 'Seeding executed successfully.<br>';
        } catch (Exception $e) {
            echo 'Error: ' . $e->getMessage();
        }

        // add more seeds here if needed
    }

    public function rollback()
    {
        // uncomment this after running rollback
        // exit;

        if (! service('ionAuth')->isAdmin()) {
            return;
        }
        // Load the migrations library
        $migrate = \Config\Services::migrations();

        try {
            // Run rollback; see the last batch that is to be kept
            // (find it in table „migrations")
            // and reference it in $target variable
            $target = 3; // if set "3", both migrations with that no and and those below will be unaffected
            $migrate->regress($target);

            echo 'Migration rollback executed successfully.<br>';
        } catch (Exception $e) {
            echo 'Error: ' . $e->getMessage();
        }
    }
}

As you can see, there are multiple precautions here:

  • I have an „exit;“ statement on all methods by default, so I have to comment those out if I want the methods to do stuff (and comment them out again after stuff is done). This prevents from re-running commands accidentally by accidentally opening a migration-related address in the browser (which is extremely easy to do).
  • I also do not pass any data to controller methods via url segments or via get variables; and
  • I check for the user to be admin.

And it is ever advisable to do db backup before executing migrations, whichever way you do it.


Paskelbta

sukūrė

Komentarai

Įrašo “Running migrations for Codeigniter 4 via HTTP” komentarų : 1

  1. Mike avataras
    Mike

    Thank you so much ! I’d been searching for hours for exactly this !

    Well done 😀

Parašykite komentarą

El. pašto adresas nebus skelbiamas. Būtini laukeliai pažymėti *

Brukalų kiekiui sumažinti šis tinklalapis naudoja Akismet. Sužinokite, kaip apdorojami Jūsų komentarų duomenys.

Raktažodžiai

atviras kodas bylos Codeigniter darbas drėlingas el. parašas EŽTT genocidas gimimas holokaustas InEnglish internetas joga Jurgelis karo nusikaltimai kde konferencija Kononov Kraujelis kubuntu LAT LGGRTC lietuvybė linux microsoft mokslai mokslas nusikaltimai žmoniškumui partizanai PHP pokaris programavimas programos religija religijos laisvė sausio13 sektos seneliai teismas teisė tinklaraštis vasiliauskas vertimas wordpress žurnalizmas

Vėliausi įrašai

Mano web projektai

Sąskaitos paprastai | Patobulinta juridinių asmenų paieška | Asmens kodų tikrinimo priemonė

Visuomenė, politika, etc.

Gentys | Religija.lt | Lietuvos religijotyrininkų draugija | Krizių įveikimo centras | GPB | BDS judėjimas

Tinklaraščiai

Kūlverstukas | Rimas Kudelis | Ar kas nors dar rašo tinklaraščius? 🙂

Technologijos

Codeigniter | HTMX | Alpine.js | Kubuntu

Mano viešasis PGP raktas
keybase.io paskyra

Autorinės teisės

© 2004-2024, Donatas Glodenis. Šiame tinklaraštyje paskelbtą autorinį turinį kitur galima naudoti tik gavus raštišką autoriaus sutikimą.

Jei konkrečiu atveju nėra nurodyta kitaip, tinklaraščio įrašuose išsakomi vertinimai yra asmeninė jų autoriaus nuomonė.