Skip to content

CodesVault/howdy_qb

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

WP Query Builder

Relational Database Query builder for WordPress. WP Query Builder uses PDO for database queries. It has zero dependencies with third-party query builders or any other composer library.


Documentation

Documentation website here.
This Query Builder is also used in Kathamo Framework. Kathamo is a modern framework for WordPress plugin development.


Examples

Create Table

DB::create('querybuilder')
	->column('ID')->bigInt()->unsigned()->autoIncrement()->primary()->required()
	->column('user_id')->bigInt()->unsigned()->required()
	->column('name')->string(255)->required()
	->column('email')->string(255)->nullable()
	->column('settings')->enum(['active', 'inactive'])
	->column('created_at')->timestamp('now', 'current')
	->foreignKey('user_id', 'users.ID', 'cascade')
	->index(['ID'])
	->execute();

Insert Statement

DB::insert('querybuilder', [
    [
        'name' => 'Keramot UL Islam',
        'email' => 'keramotul.@gmail.com',
    ]
]);

Update Statement

DB::update('querybuilders', [
    'name' => 'Keramot UL',
    'email' => 'keramotul.islam@gmail.com'
])
->where('ID', '=', 10)
->andWhere('name', '=', 'Abm Sourav')
->execute();

Select Statement

$result =
DB::select('qb.ID', 'qb.name, qb.email')
    ->from('querybuilders')
    ->alias('qb')
    ->groupBy('name')
    ->get();


// *** where clouse
$result =
DB::select('posts.ID', 'posts.post_title')
    ->distinct()
    ->from('posts posts')
    ->where('posts.post_status', '=', 'publish')
    ->orderBy('post_title', 'DESC')
    ->limit(10)->offset(2)
    ->get();

// *** JOIN
DB::select('users.display_name name')
    ->count('posts.ID', 'posts')
    ->from('users users')
    ->join('posts posts')
    ->where('posts.post_status', '=', 'publish')
    ->andWhere('posts.post_type', '=', 'post')
    ->get();

// raw sql
DB::select('posts.post_title')
    ->from('posts posts')
    ->raw("WHERE posts.post_type = 'post'")
    ->andWhere('posts.post_status', '=', 'publish')
    ->raw("LIMIT 10")
    ->get();

Delete Statement

// delete one row
DB::delete('posts')
    ->where('ID', '=', 3)
    ->execute();

// delete all records
DB::delete('posts')->execute();

Drop Statement

DB::drop('posts');
DB::dropIfExists('terms');

Alter Statement

DB::alter('cv_users')
    ->modify('name', 'username')->string(455)->required()
    ->modify('settings')->json()
    ->execute();


Single instence

Expressions also can be exicuted with one instence of DB class. By doing this database connection will be stablished only once.

$db = new DB();

$result =
$db::select('posts.ID', 'posts.post_title')
    ...

$db::create('meta')
    ...


Database Connection

By default database connection will set out of the box, automaically. But you can also manually input database configurations. This way, you also can debug your database queries from terminal.

$db = DB::setConnection(
	[
		"dbhost"        => 'mysql_host',
		"dbname"        => 'database_name',
		"dbuser"        => 'database_user',
		"dbpassword"    => 'database_password',
		"prefix"        => 'database_table_prefix'
	]
);


Driver

The default driver is pdo. But if you want to use wpdb which uses Mysqli, you also can do that by changing the driver.

$db = new DB('wpdb');

$db::select('posts.post_title')
    ->from('posts posts')
    ->get();


Dev Envirenment Setup for Contributors

Want to contribute to this package? Please follow the steps below.

  • Create a local WordPress envirenment setup.
  • Create a basic plugin.
  • Run composer init into the plugin.
  • Clone git@github.com:CodesVault/howdy_qb.git into plugin folder.
  • Add repository for local package in plugin's composer.json.
    "repositories": [
    	{
    		"type": "path",
    		"url": "./howdy_qb",
    		"options": {
    			"symlink": true
    		}
    	}
    ],
            
  • Require this package. composer require "codesvault/howdy-qb @dev"