М.б товарищу Koenig`у пригодиццо, когда он решит "Допилить" свой класс.
Вот ссылка на пастебин с кодом для просмотра онлайн: http://pastebin.com/jmCdi2pZ
Для детального ковыряния, креплю архив с классом.
А вот примеры работы (под каждым запросом, построенным при помощи билдера, идет комментарий с SQL который будит сгенерирован).
/* изменение данных */
echo (new Query('users'))->insert(['col' => 'value']);
//=> INSERT INTO `users` (`col`) VALUES (?)
echo (new Query('users'))->where('col', '=', 50)->update(['col' => 'value']);
//=> UPDATE `users` SET `col` = ? WHERE `col` = ?
echo (new Query('users'))->where('col', '=', 50)->delete();
//=> DELETE FROM `users` WHERE `col` = ?
/* инкремент/декремент */
echo (new Query('users'))->where('col', '=', 50)->increment('col');
//=> UPDATE `users` SET `col` = col + 1 WHERE `col` = ?
echo (new Query('users'))->where('col', '=', 50)->decrement('col');
//=> UPDATE `users` SET `col` = col - 1 WHERE `col` = ?
/* получение агрегатного состояния */
echo (new Query('users'))->count();
//=> SELECT COUNT(*) AS `aggregation` FROM `users`
echo (new Query('users'))->count('col');
//=> SELECT COUNT(`col`) AS `aggregation` FROM `users`
echo (new Query('users'))->min('col');
//=> SELECT MIN(`col`) AS `aggregation` FROM `users`
echo (new Query('users'))->max('col');
//=> SELECT MAX(`col`) AS `aggregation` FROM `users`
echo (new Query('users'))->sum('col');
//=> SELECT SUM(`col`) AS `aggregation` FROM `users`
echo (new Query('users'))->avg('col');
//=> SELECT AVG(`col`) AS `aggregation` FROM `users`
/* выборка всех данных */
echo (new Query('users'))->select();
//=> SELECT * FROM `users`
echo (new Query('users'))->select(['col', ['col', 'b']]);
//=> SELECT `col`, `col` AS `b` FROM `users`
/* с сортировкой */
echo (new Query('users'))->order('col')->select();
//=> SELECT * FROM `users` ORDER BY `col` ASC
/* с лимитом */
echo (new Query('users'))->limit(10)->select();
//=> SELECT * FROM `users` LIMIT 10
/* с условием */
echo (new Query('users'))->where('col', '=', 30)->where('col', '=', 50)->select();
//=> SELECT * FROM `users` WHERE `col` = ? AND `col` = ?
/* с группой условий */
echo (new Query('users'))
->where('col', '=', 20)
->where(function($query) {
$query->where('col', '=', 30)
->orWhere('col', '=', 50);
})->select();
//=> SELECT * FROM `users` WHERE `col` = ? AND (`col` = ? OR `col` = ?)
/* с простым объединением */
echo (new Query('users'))->join('table', 'table.user_id', '=', 'users.id')->select();
//=> SELECT * FROM `users` INNER JOIN `table` ON (`table`.`user_id` = `users`.`id`)
/* со сложным обьединением */
echo (new Query('users'))
->join('table', function($query) {
$query->on('table.user_id', '=', 'users.id')
->orOn('table.user_id', '=', 'users.id');
})
->select();
//=> SELECT * FROM `users` INNER JOIN `table` ON (`table`.`user_id` = `users`.`id` OR `table`.`user_id` = `users`.`id`)