Guía
Base de datos
Uso de `Database`, QueryBuilder y transacciones.
Inyecta Database en el servicio
Deja que el controller gestione HTTP y mueve la persistencia a un repository o servicio de aplicación. Inyecta Database por constructor allí donde realmente corresponde el trabajo con base de datos.
<?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 para leer y escribir
Para consultas CRUD habituales, table() es un buen punto de partida. La documentación usa la tabla neutra articles con las columnas id, title y published.
$articles = $this->db->table('articles')
->select(['id', 'title', 'published'])
->where('published', 1)
->orderBy('id', 'DESC')
->getArray();Agrupa escrituras relacionadas en una transacción
Envuelve las escrituras de varios pasos en Database::transaction() para que los cambios relacionados se apliquen todos o se reviertan todos.
$this->db->transaction(function (): void {
$this->db->table('articles')->insert([
'title' => 'New article',
'published' => 1,
]);
$this->db->table('article_audit')->insert([
'event' => 'created',
]);
});