codesvault / howdy-qb
Mysql Query Builder for WordPress
Requires
- php: >=7.1
Requires (Dev)
- phpcompatibility/php-compatibility: ^9.3
- phpunit/phpunit: ^9.5
- squizlabs/php_codesniffer: ^3.7
- symfony/var-dumper: ^5.4
- wp-coding-standards/wpcs: ^2.3
README
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"