Leitfaden
Datenbank
Verwendung von `Database`, QueryBuilder und Transaktionen.
Database in den Service injizieren
Lass den Controller HTTP behandeln und verschiebe Persistenz in ein Repository oder einen Anwendungsservice. Injiziere Database über den Konstruktor dort, wo die Datenbankarbeit tatsächlich hingehört.
<?php
declare(strict_types=1);
namespace App\Services;
use Lemonade\Framework\Database\Database;
final class ArticleRepository
{
public function __construct(
private readonly Database $db,
) {}
}QueryBuilder für Lesen und Schreiben verwenden
Für gewöhnliche CRUD-Abfragen ist table() ein guter Einstieg. Die Dokumentation verwendet die neutrale Tabelle articles mit den Spalten id, title und published.
$articles = $this->db->table('articles')
->select(['id', 'title', 'published'])
->where('published', 1)
->orderBy('id', 'DESC')
->getArray();Zusammengehörige Schreibvorgänge in eine Transaktion packen
Umschließe mehrstufige Schreibvorgänge mit Database::transaction(), damit zusammengehörige Änderungen entweder vollständig erfolgreich sind oder gemeinsam zurückgerollt werden.
$this->db->transaction(function (): void {
$this->db->table('articles')->insert([
'title' => 'New article',
'published' => 1,
]);
$this->db->table('article_audit')->insert([
'event' => 'created',
]);
});