-
-
Notifications
You must be signed in to change notification settings - Fork 0
Getting Started
wind111-lang edited this page Jul 9, 2026
·
1 revision
composer require wind111-lang/sumire- PHP 8.2+
ext-pdo- A PDO driver for your database:
- SQLite:
pdo_sqlite - MySQL:
pdo_mysql - PostgreSQL:
pdo_pgsql
- SQLite:
Sumire starts from an existing PDO instance.
use Sumire\Database;
$pdo = new PDO('sqlite:' . __DIR__ . '/database.sqlite');
$database = Database::connect($pdo);Database::connect() wraps PDO in Sumire's Connection class and configures PDO to use exceptions and associative arrays.
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;
}
}Sumire does not run migrations. Create tables with your own migration tool or with PDO directly.
$database->connection()->execute(<<<'SQL'
CREATE TABLE 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);
$sameUser = $database->find(User::class, $user->id());
$allUsers = $database->repository(User::class)->all();For generated IDs, Sumire assigns the generated value back to the entity after insert.
$users = $database->repository(User::class);
$activeUsers = $users->findBy(['active' => true], ['name' => 'ASC']);
$firstAda = $users->firstBy(['name' => 'Ada Lovelace']);