Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

108 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

InitPHP Database

A Composer-friendly, batteries-included facade over the InitORM stack — query builder, DBAL connection, ORM models and entities — plus a server-side helper for DataTables.js.

CI Latest Stable Version Total Downloads License PHP Version Require

What is this?

initphp/database does not reimplement an ORM. It is the InitPHP-branded entry point to the InitORM stack:

You write You actually get
InitPHP\Database\DB A static facade over InitORM\Database\Database.
InitPHP\Database\Database The InitORM Database class.
InitPHP\Database\Model The InitORM active-record Model.
InitPHP\Database\Entity The InitORM Entity with accessor / mutator hooks.
InitPHP\Database\Utils\Datatables\Datatables Original server-side DataTables.js helper — the one piece that lives in this package.

If a feature is documented for InitORM, it works here under the InitPHP namespace.

Requirements

  • PHP 8.1 or later
  • ext-pdo and a PDO driver for your target database (pdo_mysql, pdo_pgsql, pdo_sqlite, …)

Installation

composer require initphp/database

Quick start

<?php
require __DIR__ . '/vendor/autoload.php';

use InitPHP\Database\DB;

DB::createImmutable([
    'dsn'      => 'mysql:host=localhost;port=3306;dbname=test;charset=utf8mb4',
    'username' => 'root',
    'password' => '',
]);

$rows = DB::select('id', 'title', 'author_id')
    ->from('posts')
    ->where('status', '=', 1)
    ->orderBy('id', 'DESC')
    ->limit(10)
    ->read()
    ->asAssoc()
    ->rows();

foreach ($rows as $row) {
    echo $row['title'], PHP_EOL;
}

Documentation

Topic-by-topic guides live in docs/:

# Guide
01 Getting started — install, connect, first query, debug & logging
02 Query Builderselect / where / join / groupBy / orderBy / limit / raw
03 CRUDcreate / read / update / delete and their *Batch siblings
04 Models — table binding, soft deletes, timestamp columns, access gates
05 Entities — attribute bag, accessor / mutator hooks (and the one PHP 8.2+ pitfall)
06 Transactions — automatic retry, dry-run / test mode
07 Query logenableQueryLog + the log connection channel
08 Datatables — server-side DataTables.js integration end-to-end
09 Multiple connections — secondary databases via DB::connect() / Model::$credentials
10 Upgrading from 3.x / 4.x — breaking changes in 5.0 and the migration path

At a glance

  • Fluent CRUD that compiles to prepared statements (named parameter bag is handled internally).
  • Per-driver SQL dialects (MySQL, PostgreSQL, SQLite, generic).
  • Models with auto-derived schemas, configurable primary key, soft deletes, and created_at / updated_at plumbing.
  • Entities with Laravel-style getColumnAttribute() / setColumnAttribute() hooks and dirty tracking via getOriginal().
  • Transaction helper with retry attempts and a testMode flag that always rolls back.
  • Query log channel that accepts a file path (with {year}/{month}/{day} placeholders), a callable, or any object exposing a critical() method.
  • Server-side DataTables.js helper that handles search, sort, paging and per-column render callbacks — see docs/08-datatables.md.

Contributing

Org-wide guidelines (PSR-12, declare(strict_types=1), Conventional Commits, PHPStan + PHPUnit on every PR) live in the InitPHP .github repo:

Local checks before opening a PR:

composer qa     # phpcs + phpstan + phpunit
composer cs-fix # auto-format

Security

Please do not open a public issue for security vulnerabilities. The org-wide SECURITY.md describes the private disclosure channels (GitHub PVR + email).

Credits

Maintained by Muhammet ŞAFAK (info@muhammetsafak.com.tr).

License

MIT.

About

PHP 8.1+ query builder, DBAL and active-record ORM — with a server-side DataTables.js helper out of the box. Built on the InitORM stack.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages