Quma is a no-ORM database library for PHP. You store SQL in files, group those files in folders, and execute them through a small PDO-backed API. Quma also ships with template queries and a migration runner.
Quma currently requires:
- PHP 8.5 or newer
ext-jsonext-pdoext-readline
composer require celemas/qumaCreate a SQL directory structure like this:
sql/
users/
byId.sql
list.sql
Add a query file:
SELECT id, email FROM users WHERE id = ?;Then configure Quma and run the query:
<?php
declare(strict_types=1);
use Celemas\Quma\Connection;
use Celemas\Quma\Database;
$conn = new Connection(
'sqlite:' . __DIR__ . '/app.sqlite',
__DIR__ . '/sql',
)->migrations(__DIR__ . '/migrations');
$db = new Database($conn);
$user = $db->users->byId(1)->one();
$users = $db->users->list()->all();Quma maps directories to properties and files to methods:
sql/users/byId.sqlbecomes$db->users->byId()sql/users/list.sqlbecomes$db->users->list()
- SQL-file based queries with positional or named parameters
- static
[::name::]placeholders for trusted driver-aware configuration fragments - PDO-backed execution with exact
one(), stablefirst(), cursor-stylefetch(),all(),lazy(),run(), andlen() - optional row hydration into typed objects
- PHP-powered SQL templates via
.tpqlfiles - multiple SQL directories with driver-specific overrides
- migration commands for
.sql,.tpql, and.phpmigrations - environment-controlled debug output for translated and interpolated SQL
Start with the docs in docs/index.md.
Recommended pages:
Quma runs against SQLite by default and can also run against MySQL and PostgreSQL when you provide test databases.
composer test
composer test:sqlite
composer test:mysql
composer test:pgsql
composer test:allFor database setup and environment variables, see docs/testing.md.
This project is licensed under the MIT license.