Aller au contenu principal

SQLite avec Symfony

Stocker des données dans SQLite avec Symfony

Petite vérification​

Avant de commencer, vérifiez si vous savez...

  1. ouvrir le fichier src/Repository/PlayerRepository.php et retrouver la méthode findPlayersByCategory() que vous avez complétée lors du TP précédent
  2. repérer, dans cette méthode, comment le paramètre category est transmis à la requête SQL sans concaténer directement sa valeur dans la chaîne (protection contre les injections SQL)
  3. exécuter cette méthode (depuis un contrôleur ou une route de test) et vérifier que fetchAllAssociative() retourne bien un tableau de résultats
📌 Réponse attendue

1. Configurer la BD SQLite dans .env​

Modifiez le fichier .env (ou .env.local) pour utiliser SQLite :

DATABASE_URL="sqlite:///%kernel.project_dir%/var/data.db"

Symfony créera automatiquement le fichier data.db dans le dossier var/ s’il n’existe pas.


2. Installer le driver SQLite​

Vérifiez que l’extension PHP pdo_sqlite est activée :

php -m | grep pdo_sqlite

Si absent, activez-la dans php.ini :

extension=pdo_sqlite

3. Créer une entité​

Par exemple, pour créer l'entité Product, utilisez la commande :

php bin/console make:entity Product

Définissez vos champs (ex. name, price).


4. Créer la base de données et les tables​

php bin/console doctrine:database:create
php bin/console make migration
php bin/console doctrine:migration:migrate

La commande doctrine:database:create crée le fichier .db pour SQLite (s'il n'existe pas).


5. Insérer des données via un contrôleur​

Exemple dans un contrôleur :

<?php

namespace App\Controller;

use App\Entity\Product;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;

class ProductController extends AbstractController
{
public function createProduct(EntityManagerInterface $entityManager): Response
{
$product = new Product();
$product->setName('Example Product');
$product->setPrice(19.99);

$entityManager->persist($product);
$entityManager->flush();

return new Response('Produit enregistré !');
}
}

Avantages de SQLite avec Symfony​

  • Pas de serveur à gérer.
  • Léger, idéal pour le développement ou les projets simples.
  • Parfait pour les applications standalone ou les PWA.
attention

SQLite ne supporte pas toutes les fonctionnalités des SGBD relationnels (ex. contraintes de clé étrangère par défaut, certaines fonctions SQL avancées). Vérifiez la compatibilité selon vos besoins.