Skip to content
Simpler Database Intaractions in PHP
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.



Base is a simple library that makes it easier to work with databases in PHP.

I have been using it since 2012 and I felt like it is about time I share it.


  • Simple
  • Intuitive
  • Independent
  • Secure
  • Tested in 5.3, 5.4, 5.5, 5.6, 7 and HHVM


Include both Base.php and Collection.php or install the composer package.


Connect to a database:

# the constructor takes the same parameters as the PDO constructor
$Base = new \Base\Base('mysql:host=localhost;dbname=example', 'username', 'password');

Work with records:

# read user 1
$Base->readItem('user', 1);
# update the username of user 1
$Base->updateItem('user', 1, ['username' => 'john.doe']);
# create a user
$Base->createItem('user', ['username' => 'jane.doe', 'email' => '']);
# delete user 1
$Base->deleteItem('user', 1);

Work with collections:

# read all users
# read the users that are marked as verified in a desc order
$Base->find('user')->whereEqual('is_verified', 1)->orderDesc('id')->read();
# read the user with the most reputation
# mark users 1 and 3 as verified
$Base->find('user')->whereIn('id', [1, 3])->update(['is_verified' => 1]);
# count the users that don't have a location
# plain sql conditions are also supported
$Base->find('user')->where('is_verified = ?', [1])->read();

Handle relationships:

# read the users that have a featured post
$Base->find('user')->has('post')->whereEqual('post.is_featured', 1)->read();
# read the posts of user 1
$Base->find('post')->belongsTo('user')->whereEqual('', 1)->read();
# read the posts that are tagged "php"
$Base->find('post')->hasAndBelongsTo('tag')->whereEqual('', 'php')->read();
# unconventional FK names are also supported
$Base->find('user')->has('post', 'author_id')->whereEqual('', 1)->read();

Execute queries:

# read all users
$Base->read('SELECT * FROM user');
# read user 1
$Base->readRecord('SELECT * FROM user WHERE id = ?', [1]);
# read the username of user 1
$Base->readField('SELECT username FROM user WHERE id = ?', [1]);
# read all usernames
$Base->readFields('SELECT username FROM user');
# update all users
$Base->update('UPDATE INTO user SET is_verified = ?', [1]);


  • Not tested on other RDBMSs than MySQL
  • Relationship methods assume that table names are singular - ex: user instead of users
  • Relationship methods assume that FK names end in _id - use $fkEnding to customize


Build Status

You can’t perform that action at this time.