PHPackages                             idlogistics/db2conn - 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. idlogistics/db2conn

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

idlogistics/db2conn
===================

Driver de conexão DB2 para Laravel usando PDO\_ODBC (sem extensão ibm\_db2), com suporte a Eloquent, Query Builder e Schema.

v1.0.0(1mo ago)02proprietaryPHPPHP ^8.2

Since Jul 4Pushed 1mo agoCompare

[ Source](https://github.com/idl-bra/db2conn)[ Packagist](https://packagist.org/packages/idlogistics/db2conn)[ RSS](/packages/idlogistics-db2conn/feed)WikiDiscussions main Synced 1w ago

READMEChangelogDependencies (2)Versions (2)Used By (0)

idlogistics/db2conn
===================

[](#idlogisticsdb2conn)

Driver de conexão **DB2 para Laravel** usando somente **PDO\_ODBC** — sem extensão `ibm_db2`, sem DLL específica de DB2. Funciona com qualquer driver ODBC instalado na máquina (IBM i Access, IBM DB2 CLI ODBC, etc.) e integra o DB2 ao Laravel como um driver nativo: **Eloquent, Query Builder, paginação, transações e Schema Builder**.

Requisitos
----------

[](#requisitos)

- PHP 8.2+ com as extensões `pdo` e `pdo_odbc` habilitadas
- Laravel 11, 12 ou 13
- Um driver ODBC para DB2 instalado no sistema operacional:
    - IBM i / AS400: *IBM i Access ODBC Driver* (parte do IBM i Access Client Solutions)
    - DB2 LUW: *IBM DB2 ODBC DRIVER* (parte do Db2 CLI driver / dsdriver)

Instalação
----------

[](#instalação)

### Via Composer (Packagist)

[](#via-composer-packagist)

```
composer require idlogistics/db2conn
```

### Via GitHub (VCS)

[](#via-github-vcs)

Se preferir instalar diretamente do repositório:

```
composer require idlogistics/db2conn:dev-main \
  --repository='{"type":"vcs","url":"https://github.com/idl-bra/db2conn.git"}'
```

### Após Instalação

[](#após-instalação)

O service provider é registrado automaticamente (package discovery) e injeta a conexão `db2` em `database.connections`.

**Publique os assets opcionais:**

```
# Publicar configuração
php artisan vendor:publish --tag=db2-config

# Publicar dashboard de testes (opcional)
php artisan vendor:publish --tag=db2-dashboard

# Publicar rotas de testes (opcional)
php artisan vendor:publish --tag=db2-routes
```

Configuração
------------

[](#configuração)

Via `.env` (3 opções, em ordem de precedência):

**Opção 1: Connection string completa (recomendada)**

```
DB2_CONNECTION_STRING="Driver={iSeries Access ODBC Driver};System=192.168.1.50;PROTOCOL=TCPIP;UID=seu_usuario;PWD=sua_senha;Default Collection=MINHALIB"
DB2_PLATFORM=ibmi
DB2_SCHEMA=MINHALIB
```

**Opção 2: DSN catalogado no ODBC**

```
DB2_DSN=AS400
DB2_PLATFORM=ibmi
DB2_SCHEMA=MINHALIB
```

**Opção 3: Host + credenciais (montagem automática)**

```
DB2_HOST=192.168.1.50
DB2_USERNAME=seu_usuario
DB2_PASSWORD=sua_senha
DB2_ODBC_DRIVER="iSeries Access ODBC Driver"
DB2_PLATFORM=ibmi
DB2_SCHEMA=MINHALIB
```

Principais chaves do config (`config/db2.php`):

ChaveDescrição`connection_string`Connection string ODBC completa (preferida)`dsn`DSN catalogado no ODBC do Windows/Linux`host`Hostname/IP do servidor (usado se `connection_string` e `dsn` vazios)`username`Usuário (necessário para montagem automática)`password`Senha (necessária para montagem automática)`schema`Executa `SET SCHEMA` logo após conectar`platform``ibmi` (AS/400), `luw` ou `zos` — define catálogos de sistema`odbc_driver`Nome do driver ODBC instalado (padrão: `iSeries Access ODBC Driver`)`odbc_keywords`Palavras-chave ODBC extras, ex: `['NAM' => 1, 'CCSID' => 1208]``offset_style``fetch` (OFFSET/FETCH, padrão) ou `row_number` para servidores antigos`after_connect`Array de SQLs executados após a conexão abrir`options`Opções PDO extras, ex: `[PDO::ATTR_CASE => PDO::CASE_LOWER]`Uso
---

[](#uso)

### Query Builder

[](#query-builder)

```
use Illuminate\Support\Facades\DB;

$pedidos = DB::connection('db2')
    ->table('PEDIDOS')
    ->where('STATUS', 'A')
    ->orderBy('DATA_CRIACAO', 'desc')
    ->limit(50)          // -> fetch first 50 rows only
    ->get();

// Paginação funciona normalmente (OFFSET ... FETCH FIRST)
$pagina = DB::connection('db2')->table('PEDIDOS')->orderBy('ID')->paginate(25);
```

### Eloquent

[](#eloquent)

```
use Illuminate\Database\Eloquent\Model;

class Pedido extends Model
{
    protected $connection = 'db2';
    protected $table = 'PEDIDOS';
    protected $primaryKey = 'ID';
    public $timestamps = false;
}

$pedidos = Pedido::where('STATUS', 'A')->with('itens')->get();

$pedido = Pedido::create(['CLIENTE' => 123]); // ID via IDENTITY_VAL_LOCAL()
```

> **Dica:** o DB2 devolve nomes de colunas em MAIÚSCULAS. Se preferir atributos minúsculos nos models, adicione `PDO::ATTR_CASE => PDO::CASE_LOWER` em `options`.

### Schema Builder (introspecção)

[](#schema-builder-introspecção)

```
Schema::connection('db2')->hasTable('PEDIDOS');
Schema::connection('db2')->getColumns('PEDIDOS');
Schema::connection('db2')->getIndexes('PEDIDOS');
Schema::connection('db2')->getTables();           // schema atual
```

### Migrations

[](#migrations)

DDL básico é suportado (`create`, `dropIfExists`, índices, FKs, add/drop column):

```
Schema::connection('db2')->create('LOGS', function (Blueprint $table) {
    $table->increments('ID');       // integer generated always as identity
    $table->string('MENSAGEM', 500);
    $table->timestamp('CRIADO_EM')->nullable();
});
```

Particularidades do DB2 tratadas pelo pacote
--------------------------------------------

[](#particularidades-do-db2-tratadas-pelo-pacote)

**Query Builder:**

- `limit(n)` → `FETCH FIRST n ROWS ONLY`
- `offset(n)` → `OFFSET n ROWS` (ou subquery com `ROW_NUMBER()` quando `offset_style = row_number`)
- `insertGetId()` → `IDENTITY_VAL_LOCAL()` (PDO\_ODBC não tem `lastInsertId`)
- `exists()` → `select case when exists (...) ... from sysibm.sysdummy1`
- `lockForUpdate()` → `FOR UPDATE WITH RS`
- `upsert()` → `MERGE INTO ... USING (VALUES ...)`
- `truncate()` → `DELETE FROM` no IBM i (TRUNCATE exige versão 7.5+)

**Conexão:**

- Escape manual (PDO\_ODBC não implementa `PDO::quote`)
- Violação de chave única detectada por SQLSTATE `23505` ou `SQL0803`(`Model::createOrFirst`, `firstOrCreate` etc.)
- Savepoints → `SAVEPOINT ... ON ROLLBACK RETAIN CURSORS` (transações aninhadas)

**Schema (introspecção de tabelas):**

- Catálogos diferentes por plataforma: `QSYS2` (IBM i), `SYSCAT` (LUW), `SYSIBM` (z/OS)

Limitações conhecidas
---------------------

[](#limitações-conhecidas)

- **JSON**: operadores `->` do query builder não são suportados (lança exceção).
- **`insertOrIgnore`**: sem equivalente no DB2 (lança exceção).
- **`change()`** em migrations: não suportado — use `DB::statement('ALTER TABLE ...')`.
- **Foreign keys via introspecção** (`Schema::getForeignKeys`): não implementado.
- **`upsert` no LUW**: parameter markers dentro de `VALUES` no `MERGE` podem exigir `CAST` explícito em algumas versões (SQL0418N). No IBM i funciona normalmente.
- **Índices no z/OS**: introspecção não implementada (`platform = zos`).

Testes
------

[](#testes)

Os testes de grammar/connector rodam sem um DB2 real:

```
php artisan test tests/Unit/Db2 tests/Feature/Db2ConnectionResolutionTest.php
```

###  Health Score

37

—

LowBetter than 81% of packages

Maintenance90

Actively maintained with recent releases

Popularity2

Limited adoption so far

Community2

Small or concentrated contributor base

Maturity46

Maturing project, gaining track record

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

Unknown

Total

1

Last Release

48d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/79525861?v=4)[IDdfonseca](/maintainers/IDdfonseca)[@IDdfonseca](https://github.com/IDdfonseca)

---

Tags

laraveldb2eloquentodbcIBMias400

### Embed Badge

![Health badge](/badges/idlogistics-db2conn/health.svg)

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

###  Alternatives

[mongodb/laravel-mongodb

A MongoDB based Eloquent model and Query builder for Laravel

7.1k8.9M111](/packages/mongodb-laravel-mongodb)[kirschbaum-development/eloquent-power-joins

The Laravel magic applied to joins.

1.6k35.7M52](/packages/kirschbaum-development-eloquent-power-joins)[psalm/plugin-laravel

Psalm plugin for Laravel

3345.4M354](/packages/psalm-plugin-laravel)[yajra/laravel-oci8

Oracle DB driver for Laravel via OCI8

8723.3M27](/packages/yajra-laravel-oci8)[api-platform/laravel

API Platform support for Laravel

58190.1k21](/packages/api-platform-laravel)[forjedio/inertia-table

Backend-driven dynamic tables for Laravel + Inertia.js

272.0k](/packages/forjedio-inertia-table)

PHPackages © 2026

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