PHPackages                             selcukmart/sqlbuilder - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. selcukmart/sqlbuilder

ActiveLibrary[Database &amp; ORM](/categories/database)

selcukmart/sqlbuilder
=====================

Modern PHP 8.1+ SQL query builder with fluent interface for Laravel, Symfony and standalone use

2.0(6mo ago)0111MITPHPPHP ^8.1

Since Jan 31Pushed 6mo ago1 watchersCompare

[ Source](https://github.com/selcukmart/SQLBuilder)[ Packagist](https://packagist.org/packages/selcukmart/sqlbuilder)[ RSS](/packages/selcukmart-sqlbuilder/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (4)Dependencies (11)Versions (6)Used By (1)

SQLBuilder - Modern PHP 8.1+ SQL Query Builder
==============================================

[](#sqlbuilder---modern-php-81-sql-query-builder)

[![PHP Version](https://camo.githubusercontent.com/7535257ca228724c93658bd52583d4e47a9bab02c356abf6e54c1d575f2151e6/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d382e312532422d626c75652e737667)](https://php.net)[![License](https://camo.githubusercontent.com/8bb50fd2278f18fc326bf71f6e88ca8f884f72f179d3e555e20ed30157190d0d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d677265656e2e737667)](LICENSE)[![Tests](https://camo.githubusercontent.com/3ab4882a1b7d64e5eb5168ad0b0b9cdfd53f59f114ee5f727958504214a5789c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f74657374732d70617373696e672d627269676874677265656e2e737667)](tests/)

Modern, fluent SQL query builder for PHP 8.1+ with built-in security, framework integration, and comprehensive SQL support.

✨ Features
----------

[](#-features)

- **🔒 Secure by Default** - Automatic parameter binding prevents SQL injection
- **⛓️ Fluent API** - Intuitive method chaining for readable code
- **🎯 Type-Safe** - Full PHP 8.1+ type declarations with enums
- **🚀 Framework Ready** - Native Laravel &amp; Symfony integration
- **📦 Complete SQL Support** - DML, DDL, and utility operations
- **🧪 Well Tested** - 90%+ code coverage
- **📖 Well Documented** - Comprehensive guides and examples

---

📋 Supported SQL Operations
--------------------------

[](#-supported-sql-operations)

### ✅ DML (Data Manipulation)

[](#-dml-data-manipulation)

- ✅ SELECT - With joins, subqueries, grouping
- ✅ INSERT - Single &amp; multiple rows
- ✅ UPDATE - With conditions
- ✅ DELETE - With conditions
- ✅ REPLACE - MySQL REPLACE operation
- ✅ TRUNCATE - Fast table truncation

### ✅ DDL (Data Definition)

[](#-ddl-data-definition)

- ✅ CREATE TABLE - Full table creation with constraints
- ✅ CREATE INDEX - Simple &amp; composite indexes
- ✅ DROP - Tables, indexes, databases
- ✅ RENAME - Table renaming

### ✅ Utility Operations

[](#-utility-operations)

- ✅ SHOW - Tables, databases, columns, indexes
- ✅ DESCRIBE - Table structure
- ✅ EXPLAIN - Query analysis
- ✅ SET - Session variables

---

📦 Installation
--------------

[](#-installation)

```
composer require selcukmart/sqlbuilder
```

### Requirements

[](#requirements)

- PHP 8.1 or higher
- Composer 2.0+

---

🚀 Quick Start
-------------

[](#-quick-start)

```
use SelcukMart\SQLBuilder\SQLBuilder;

// Simple SELECT query
$query = SQLBuilder::table('users')
    ->select('id', 'name', 'email')
    ->where('status', '=', 'active')
    ->orderBy('created_at')
    ->limit(10)
    ->getSQL();

echo $query;
// SELECT id, name, email FROM users WHERE status = :param_0 ORDER BY created_at ASC LIMIT 10

// Get parameter bindings for prepared statements
$bindings = $builder->getBindings();
// ['param_0' => 'active']
```

---

📖 Complete Usage Guide
----------------------

[](#-complete-usage-guide)

### SELECT Queries

[](#select-queries)

#### Basic SELECT

[](#basic-select)

```
// Select all columns
$query = SQLBuilder::table('users')->getSQL();
// SELECT * FROM users

// Select specific columns
$query = SQLBuilder::select('id', 'name', 'email')
    ->from('users')
    ->getSQL();
// SELECT id, name, email FROM users
```

#### WHERE Clauses

[](#where-clauses)

```
// Simple WHERE
$builder = SQLBuilder::table('users')
    ->where('age', '>', 18)
    ->where('status', '=', 'active');

// WHERE with OR
$builder = SQLBuilder::table('users')
    ->where('role', '=', 'admin')
    ->orWhere('role', '=', 'moderator');

// WHERE IN
$builder = SQLBuilder::table('users')
    ->whereIn('id', [1, 2, 3, 4, 5]);

// WHERE BETWEEN
$builder = SQLBuilder::table('products')
    ->whereBetween('price', 10.00, 100.00);
```

#### JOIN Operations

[](#join-operations)

```
// INNER JOIN
$query = SQLBuilder::select('u.name', 'p.title')
    ->from('users', 'u')
    ->innerJoin('posts', 'p.user_id', '=', 'u.id', 'p')
    ->getSQL();

// LEFT JOIN
$query = SQLBuilder::table('users', 'u')
    ->leftJoin('profiles', 'profiles.user_id', '=', 'u.id', 'pr')
    ->getSQL();

// Multiple JOINS
$query = SQLBuilder::table('users', 'u')
    ->leftJoin('profiles', 'profiles.user_id', '=', 'u.id', 'pr')
    ->leftJoin('settings', 'settings.user_id', '=', 'u.id', 's')
    ->where('u.active', '=', true)
    ->getSQL();
```

#### GROUP BY &amp; HAVING

[](#group-by--having)

```
use SelcukMart\SQLBuilder\Enums\OrderDirection;

$query = SQLBuilder::select('category', 'COUNT(*) as total')
    ->from('products')
    ->groupBy('category')
    ->having('COUNT(*)', '>', 5)
    ->orderBy('total', OrderDirection::DESC)
    ->getSQL();
```

---

### INSERT

[](#insert)

```
// Single row INSERT
$builder = SQLBuilder::insert()
    ->into('users')
    ->values([
        'name' => 'John Doe',
        'email' => 'john@example.com',
        'age' => 30
    ]);

// Multiple rows INSERT
$builder = SQLBuilder::insert()
    ->into('users')
    ->multipleValues([
        ['name' => 'John', 'email' => 'john@example.com'],
        ['name' => 'Jane', 'email' => 'jane@example.com'],
        ['name' => 'Bob', 'email' => 'bob@example.com']
    ]);
```

---

### UPDATE

[](#update)

```
// Simple UPDATE
$builder = SQLBuilder::update('users')
    ->set([
        'name' => 'John Updated',
        'email' => 'john.new@example.com'
    ])
    ->where('id', '=', 1);

// UPDATE with multiple conditions
$builder = SQLBuilder::update('users')
    ->set(['status' => 'inactive'])
    ->where('last_login', '', $_POST['age']);

$sql = $builder->getSQL();
// SELECT * FROM users WHERE email = :param_0 AND age > :param_1

$bindings = $builder->getBindings();
// ['param_0' => 'user@example.com', 'param_1' => 25]
```

---

🎨 Framework Integration
-----------------------

[](#-framework-integration)

### Laravel

[](#laravel)

```
use SelcukMart\SQLBuilder\Laravel\Facades\SQLBuilder;

class UserController extends Controller
{
    public function index()
    {
        $builder = SQLBuilder::table('users')
            ->select('*')
            ->where('active', '=', true);

        $users = DB::select($builder->getSQL(), $builder->getBindings());

        return view('users.index', compact('users'));
    }
}
```

### Symfony

[](#symfony)

```
use SelcukMart\SQLBuilder\SQLBuilder;

class UserService
{
    public function __construct(
        private SQLBuilder $sqlBuilder,
        private Connection $connection
    ) {}

    public function getActiveUsers(): array
    {
        $builder = $this->sqlBuilder->select('*')
            ->from('users')
            ->where('status', '=', 'active');

        return $this->connection->fetchAllAssociative(
            $builder->getSQL(),
            $builder->getBindings()
        );
    }
}
```

---

🚀 Advanced Features
-------------------

[](#-advanced-features)

### Subqueries

[](#subqueries)

```
// Subquery in FROM
$subquery = SQLBuilder::select('id', 'name')
    ->from('users')
    ->where('status', '=', 'active');

$query = SQLBuilder::select('*')
    ->fromSubquery($subquery, 'active_users')
    ->where('active_users.age', '>', 18)
    ->getSQL();
```

### Complex Queries

[](#complex-queries)

```
$builder = SQLBuilder::select('u.id', 'u.name', 'COUNT(p.id) as post_count')
    ->from('users', 'u')
    ->leftJoin('posts', 'p.user_id', '=', 'u.id', 'p')
    ->where('u.status', '=', 'active')
    ->where('u.age', '>=', 18)
    ->groupBy('u.id', 'u.name')
    ->having('COUNT(p.id)', '>', 5)
    ->orderBy('post_count', OrderDirection::DESC)
    ->limit(10);
```

---

📚 Documentation
---------------

[](#-documentation)

- **[UPGRADE.md](UPGRADE.md)** - Migration guide from v1 to v2
- **[ROADMAP.md](ROADMAP.md)** - Development roadmap
- **[EXECUTIVE\_SUMMARY.md](EXECUTIVE_SUMMARY.md)** - Project overview

---

🧪 Testing
---------

[](#-testing)

```
# Run tests
composer test

# Run tests with coverage
composer test-coverage

# Run static analysis
composer phpstan

# Check code style
composer cs-check
```

---

📄 License
---------

[](#-license)

MIT License - see [LICENSE](LICENSE) file for details.

---

🙏 Credits
---------

[](#-credits)

Created by [Selcuk Mart](https://github.com/selcukmart)

---

**Made with ❤️ for the PHP community**

###  Health Score

38

—

LowBetter than 85% of packages

Maintenance66

Regular maintenance activity

Popularity5

Limited adoption so far

Community11

Small or concentrated contributor base

Maturity62

Established project with proven stability

 Bus Factor1

Top contributor holds 85% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~453 days

Total

4

Last Release

207d ago

Major Versions

1.0.2 → 2.02025-10-23

PHP version history (2 changes)1.0.0PHP &gt;=7.0.0

2.0PHP ^8.1

### Community

Maintainers

![](https://www.gravatar.com/avatar/d4ac9b4f7a2d8a39f741a8e6fd69e539f1bd66fdcff6a301a44f2a1c6f5e198c?d=identicon)[selcukmart](/maintainers/selcukmart)

---

Top Contributors

[![selcukmart](https://avatars.githubusercontent.com/u/8598667?v=4)](https://github.com/selcukmart "selcukmart (17 commits)")[![claude](https://avatars.githubusercontent.com/u/81847?v=4)](https://github.com/claude "claude (3 commits)")

---

Tags

symfonylaraveldatabasesqlfluentquery builderphp8

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan, Psalm

Code StylePHP CS Fixer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/selcukmart-sqlbuilder/health.svg)

```
[![Health](https://phpackages.com/badges/selcukmart-sqlbuilder/health.svg)](https://phpackages.com/packages/selcukmart-sqlbuilder)
```

###  Alternatives

[illuminate/database

The Illuminate Database package.

2.8k52.4M9.4k](/packages/illuminate-database)[foolz/sphinxql-query-builder

A PHP query builder for SphinxQL and ManticoreQL with MySQLi and PDO drivers.

3232.2M32](/packages/foolz-sphinxql-query-builder)[fobia/laravel-sphinx

A Laravel query builder for SphinxQL

31132.1k](/packages/fobia-laravel-sphinx)[wayofdev/laravel-cycle-orm-adapter

🔥 A Laravel adapter for CycleORM, providing seamless integration of the Cycle DataMapper ORM for advanced database handling and object mapping in PHP applications.

3516.7k3](/packages/wayofdev-laravel-cycle-orm-adapter)[cubettech/lacassa

Cassandra based query builder for laravel.

358.5k](/packages/cubettech-lacassa)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
