DB Package

NaifyDb

軽量データベースラッパー

コア21ファイル PDOベース Table / Row / RowSet / QueryBuilder PHP 8.0+

とは

複雑な問い合わせまで抽象化すると、かえって読みにくくなります。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パッケージの最初の入口。複数接続を名前付きで管理し、設定だけ登録して、初回アクセスで遅延接続します
ConnectionPDOとAdapterを束ね、fetch / execute / tableなど基本操作を受け持ちます
Tableテーブル単位のCRUDとQueryBuilderの入口。findById() や findOrCreate() をここに置きます
Row1行分の値とdirty trackingを持つオブジェクト。更新と削除の責任を1レコードへ寄せます
RowSet複数行の結果を扱うコレクション。繰り返し処理や一括操作を読みやすく保ちます
QueryBuilderWhere / Order / Limitを分けてSQLを組み立てます。重いORMではなく、読みやすい補助として使います
Schema / Adapter / ProfilerDB方言の差異、テーブル情報、クエリ計測を支える補助層

APIリファレンス

実装の型情報やPHPDocから生成したAPIリファレンスです。