-
-
Notifications
You must be signed in to change notification settings - Fork 0
Examples
wind111-lang edited this page Jul 9, 2026
·
1 revision
use Sumire\Attributes\Column;
use Sumire\Attributes\Id;
use Sumire\Attributes\Table;
#[Table('users')]
final class User
{
#[Id]
private ?int $id = null;
#[Column]
private string $name;
#[Column]
private string $email;
#[Column]
private bool $active = true;
public function __construct(string $name, string $email)
{
$this->name = $name;
$this->email = $email;
}
public function id(): ?int
{
return $this->id;
}
public function deactivate(): void
{
$this->active = false;
}
}use Sumire\Database;
$database = Database::connect(new PDO('sqlite:' . __DIR__ . '/database.sqlite'));
$database->connection()->execute(<<<'SQL'
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT NOT NULL,
active INTEGER NOT NULL
)
SQL);$user = new User('Ada Lovelace', 'ada@example.com');
$database->persist($user);
echo $user->id();
$sameUser = $database->find(User::class, $user->id());$users = $database->repository(User::class);
$activeUsers = $users->findBy(
criteria: ['active' => true],
orderBy: ['name' => 'ASC'],
limit: 10,
);$users = $database->repository(User::class)->findBy([
'email' => [
'ada@example.com',
'grace@example.com',
],
]);$posts = $database->findBy(Post::class, [
'publishedAt' => null,
]);This generates an IS NULL condition.
$user = $database->repository(User::class)->find(1);
$user->deactivate();
$database->persist($user);persist() updates an entity when its ID is not null.
$user = $database->repository(User::class)->find(1);
$database->remove($user);$database->transaction(function (Database $database): void {
$database->persist(new User('Ada Lovelace', 'ada@example.com'));
$database->persist(new User('Grace Hopper', 'grace@example.com'));
});If any statement fails, the transaction is rolled back.
$rows = $database->connection()->fetchAll(
'SELECT email FROM users WHERE active = :active ORDER BY email ASC',
['active' => true],
);Use raw SQL when you need a query that is outside Sumire's small repository API.