DB Package
NaifyDb
軽量データベースラッパー
コア21ファイル
PDOベース
Table / Row / RowSet / QueryBuilder
PHP 8.0+
NaifyDbとは
複雑な問い合わせまで抽象化すると、かえって読みにくくなります。JOINや集計まで独自の書き方に押し込むほど、SQLの意図は見えにくくなります。
そこでNaifyDbは、単純なCRUDと接続管理を中心に薄く支えます。複雑な問い合わせは無理に包まず、SQLの見通しを残します。Connection、Table、Row、QueryBuilderに役割を分け、SQLを出す場所もそろえることで、人にもAIにも追いやすい構造にしています。
最初の入口
接続設定の読み込みから、データの取得・保存までを NaifyDb\NaifyDb から始められます。
use NaifyDb\NaifyDb;
require __DIR__ . '/libs/NaifyDb/NaifyDb.php';
NaifyDb::boot();
NaifyDb::configure()
->loadConfigFile(__DIR__ . '/config/database.php')
->apply(); // 接続設定を登録する
$user = NaifyDb::db('main')->table('users')->findById(1); // 取得を始める入口
if ($user === null) {
throw new \RuntimeException('User not found');
}
$user->name = 'Naify'; // 値を変更する
$user->save(); // 保存する
どこまで含むか / 含まないか
NaifyDbは、SQLの存在を消すためのORMではありません。毎回PDOを直書きしなくてよい中間層として、単純なDB操作を支えつつ、複雑な問い合わせではSQLの見通しを残します。
含むもの
- 接続管理とSQL実行の入口
- 単純なCRUD
- 条件組み立ての補助
- スキーマ差異の吸収とクエリ計測
含まないもの
- 巨大なORMのライフサイクル
- モデル自動生成やメタデータ魔法
- ドメインルールまで含む永続化抽象
- SQLを完全に隠すこと
主要クラス
日常的に使うのは、入口の NaifyDb と、Table・Row・QueryBuilder が中心です。
| クラス | 役割 |
|---|---|
NaifyDb | パッケージの最初の入口。複数接続を名前付きで管理し、設定だけ登録して、初回アクセスで遅延接続します |
Connection | PDOとAdapterを束ね、fetch / execute / tableなど基本操作を受け持ちます |
Table | テーブル単位のCRUDとQueryBuilderの入口。findById() や findOrCreate() をここに置きます |
Row | 1行分の値とdirty trackingを持つオブジェクト。更新と削除の責任を1レコードへ寄せます |
RowSet | 複数行の結果を扱うコレクション。繰り返し処理や一括操作を読みやすく保ちます |
QueryBuilder | Where / Order / Limitを分けてSQLを組み立てます。重いORMではなく、読みやすい補助として使います |
Schema / Adapter / Profiler | DB方言の差異、テーブル情報、クエリ計測を支える補助層 |
APIリファレンス
実装の型情報やPHPDocから生成したAPIリファレンスです。