Guide

Base de données

Utilisation de `Database`, QueryBuilder et des transactions.

Injecter Database dans le service

Laissez le controller gérer HTTP et déplacez la persistence dans un repository ou un service applicatif. Injectez Database par le constructeur là où le travail de base de données a réellement sa place.

example.php
<?php

declare(strict_types=1);

namespace App\Services;

use Lemonade\Framework\Database\Database;

final class ArticleRepository
{
    public function __construct(
        private readonly Database $db,
    ) {}
}

Utiliser QueryBuilder pour lire et écrire

Pour les requêtes CRUD courantes, table() est un bon point de départ. La documentation utilise la table neutre articles avec les colonnes id, title et published.

example.php
$articles = $this->db->table('articles')
    ->select(['id', 'title', 'published'])
    ->where('published', 1)
    ->orderBy('id', 'DESC')
    ->getArray();

Regrouper les écritures liées dans une transaction

Encapsulez les écritures en plusieurs étapes dans Database::transaction() afin que les changements liés réussissent tous ou soient tous annulés.

example.php
$this->db->transaction(function (): void {
    $this->db->table('articles')->insert([
        'title' => 'New article',
        'published' => 1,
    ]);

    $this->db->table('article_audit')->insert([
        'event' => 'created',
    ]);
});