Guida
Database
Uso di `Database`, QueryBuilder e transazioni.
Inietta Database nel servizio
Lascia che il controller gestisca HTTP e sposta la persistenza in un repository o servizio applicativo. Inietta Database tramite il costruttore dove il lavoro sul database appartiene davvero.
<?php
declare(strict_types=1);
namespace App\Services;
use Lemonade\Framework\Database\Database;
final class ArticleRepository
{
public function __construct(
private readonly Database $db,
) {}
}Usa QueryBuilder per letture e scritture
Per le query CRUD comuni, table() è un buon punto di partenza. La documentazione usa la tabella neutra articles con le colonne id, title e published.
$articles = $this->db->table('articles')
->select(['id', 'title', 'published'])
->where('published', 1)
->orderBy('id', 'DESC')
->getArray();Raggruppa le scritture correlate in una transazione
Racchiudi le scritture in più passaggi in Database::transaction() così le modifiche correlate riescono tutte oppure vengono tutte annullate.
$this->db->transaction(function (): void {
$this->db->table('articles')->insert([
'title' => 'New article',
'published' => 1,
]);
$this->db->table('article_audit')->insert([
'event' => 'created',
]);
});