Créez le contexte
src/Data/AppDbContext.php
namespace App\Data;
use AML\Data\{DbContext, DbSet};
use App\Models\Book;
final class AppDbContext extends DbContext
{
/** @return DbSet<Book> */
public function books(): DbSet
{
return $this->set(Book::class);
}
}Les quatre opérations fondamentales
// Create
$book = new Book();
$book->title = 'The Pragmatic Programmer';
$book->author = 'Andrew Hunt & David Thomas';
$db->books()->add($book);
// Read
$books = $db->books()->orderBy('title')->all();
$book = $db->books()->find(1);
// Update
$book->title = 'New title';
$db->books()->update($book);
// Delete
$db->books()->remove($book);Les valeurs sont envoyées comme paramètres à PDO; elles ne sont pas concaténées dans le SQL. DbSet limite aussi les opérateurs de recherche et valide les noms de colonnes issus des métadonnées.
Le suivi des changements
$book = $db->books()->find(1);
$book->title = 'Domain-Driven Design';
$count = $db->saveChanges(); // 1Une entité lue par le contexte possède un instantané. saveChanges() compare l’objet courant, détecte sa modification et exécute toutes les écritures dans une transaction.
Filtrer et paginer
$page = $db->books()
->where('author', 'LIKE', '%Martin%')
->orderBy('title', 'asc')
->paginate(page: 1, perPage: 20);where(), orderBy() et limit() retournent un nouvel objet de requête : la requête d’origine n’est pas modifiée. paginate() fournit les éléments, le total et les informations de page.