Configurer une base de données SQLite

Dans ce tutoriel nous allons configurer PHP et Laravel pour utiliser une base de données SQLite.

Laravel est compatible par défaut avec 4 types de bases de données : MySQL, PostgreSQL, SQLite et SQL Server. Vous avez sans doute l'habitude d'utiliser MySQL dans vos projets PHP mais pour ce tutoriel, nous allons utiliser SQLite car cette base de données est bien plus simple à installer et configurer.

Configuration de PDO SQLite

Afin que PHP puisse communiquer avec SQLite, vous devez activer l'extension PDO SQLite.

Ubuntu

Avec Ubuntu 17.10, vous devez installer le paquet php-pdo-sqlite :

sudo apt install php-pdo-sqlite

macOS

Avec macOS Sierra, si vous avez suivi mon tutoriel précédent lors de l'installation de PHP, l'extension PDO SQLite est déjà activée par défaut.

Windows

Et avec Windows 10, vous devez activer l'extension dans le fichier php.ini. Pour cela, ouvrez le fichier C:\PHP\php.init avec le bloc note et trouvez la ligne ;extension=php_pdo_sqlite.dll. Pour activer l'extension, il suffit d'enlever le point-virgule au début de la ligne.

Configurer Laravel

La configuration de la base de données avec Laravel se situe dans le fichier config/database.php. Dans ce fichier, la clé default permet de spécifier le type de base de données voulu. Par défaut, Laravel appelle la fonction env() qui permet de récupérer une variable d'environnement. Une variable d'environnement est une variable propre à votre machine, sa valeur sera différente sur votre machine de test, sur votre serveur de production ou sur la machine d'un collègue. Même si il est possible d'enlever l'appel à la fonction env() et simplement renseigner 'default' => 'sqlite', ce n'est pas considéré comme une bonne pratique. Nous allons plutôt modifier la variable d'environnement dans le fichier .env situé à la racine du projet et remplacer DB_CONNECTION=mysql par DB_CONNECTION=sqlite.

Pour le reste de la configuration de SQLite, tout est dans le fichier config/database.php. On peut d'ailleurs voir que les configurations possibles pour MySQL sont bien plus importantes que pour SQLite. Comme une base de données SQLite est un simple fichier, sans nom d'utilisateur, sans mot de passe, etc. nous n'avons qu'à spécifier le chemin vers le fichier dans la clé 'database' => env('DB_DATABASE', database_path('database.sqlite')). La valeur par défaut de cette configuration correspond au chemin chemin/vers/mon-projet/database/database.sqlite. Ce chemin est correct, nous allons l'utiliser.

Donc pour terminer la configuration de notre application Laravel, nous avons simplement besoin de supprimer les variables d'environnement inutiles en supprimant toutes les lignes commencant par DB_* dans le fichier .env sauf la ligne DB_CONNECTION=sqlite.

Création de la base de données

Pour tester notre installation nous pouvons lancer la commande php artisan migrate:status. Cette commande nous retourne une erreur car la base de données n'existe pas. Cela est normal car le fichier database/database.sqlite n'existe pas dans notre projet.

Pour créer la base de données, nous avons simplement besoin de créer un fichier vide database/database.sqlite avec Atom par exemple.

En relançant la commande php artisan migrate:status, le message « No migrations found. » devrait s'afficher. Ce message signifie que Laravel a bien réussi à se connecter à la base de données SQLite (donc que PHP et Laravel sont bien configurés) mais que cette base de données est vide. Nous verrons dans le prochain tutoriel comment créer nos tables dans la base de données.