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(8mo ago)0111MITPHPPHP ^8.1

Since Jan 31Pushed 8mo ago1 watchersCompare

[ Source](https://github.com/selcukmart/SQLBuilder)[ Packagist](https://packagist.org/packages/selcukmart/sqlbuilder)[ RSS](/packages/selcukmart-sqlbuilder/feed)WikiDiscussions master Synced 2d 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

37

—

LowBetter than 81% of packages

Maintenance60

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

253d 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://avatars.githubusercontent.com/u/8598667?v=4)[SELÇUK MART](/maintainers/selcukmart)[@selcukmart](https://github.com/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

[fobia/laravel-sphinx

A Laravel query builder for SphinxQL

32138.0k](/packages/fobia-laravel-sphinx)[ahmed-bhs/doctrine-doctor

Runtime analysis tool for Doctrine ORM integrated into Symfony Web Profiler. Unlike static linters, it analyzes actual query execution at runtime to detect performance bottlenecks, security vulnerabilities, and best practice violations during development with real execution context and data.

9410.8k](/packages/ahmed-bhs-doctrine-doctor)[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.

3535.8k3](/packages/wayofdev-laravel-cycle-orm-adapter)[laravel-doctrine/fluent

A fluent PHP mapping driver for Doctrine2.

43447.2k16](/packages/laravel-doctrine-fluent)[cubettech/lacassa

Cassandra based query builder for laravel.

358.6k](/packages/cubettech-lacassa)

PHPackages © 2026

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